Electronic Engineering/C++

C++ 실습 과제 2

해시브라우니 2022. 7. 5. 18:56

#include <iostream>
#include <string>
using namespace std;

class String { //string 클래스 선언
	string s, back; // 입력받을 문자열과 거꾸로 문자열이 들어갈 문자열변수 선언
public:
	String()	{ //생성자
		cout << "뒤집을 문자열을 입력하세요>> "; 
		getline(cin, s, '\n'); //띄어쓰기를 허용한 s 문자열 입력, Enter키를 누를시 종료
		int length = s.length();// 길이를 정수형 변수로 선언, 문자열 길이 저장.

		for (int i = 0; i <= length; i++) {//문자열 길이만큼 다음 행위 반복
			string first = s.substr(length - i, 1);//입력받은 문자열의 제일 끝 문자를 저장 
			back += first;//제일끝 문자를 back 문자열에 저장, 위 과정 반복.
		}
		cout << back;//거꾸로 저장된 문자 출력
	}
};

int main() {
	String word;//객체 생성, 생성자 함수 실행
}

#include <iostream>
#include <string>
using namespace std;

class Player { // Player 클래스 선언
	string name; //이름 Private화
public:
	void getname(); //사람의 이름을 가져옴
	string peoplename() { //사람 이름을 반환
		return name;
	} 
};

void Player::getname() { //이름 입력 함수
	cout << "참가자의 이름을 입력하세요. 빈칸 없이>>"; 
	cin >> name; //name에 이름 입력
}

class WordGame { //WordGame 클래스 선언
	int length; //단어의 길이 변수 선언
	string firWord; //첫번째 단어 선언
	string nextWord; //다음 단어 선언
public:
	WordGame() { length = 0; firWord = "아버지"; }; //생성자 함수 
	bool equal(); //단어가 같은지 비교
	void getword(); //단어를 받는 함수
	void changeword(); //단어를 변경하는 함수
};

void WordGame::getword() { //단어를 입력하고 저장하는 함수
	cin >> nextWord; // 입력된 단어 저장
}

bool WordGame::equal() { //단어 비교
	length = firWord.length(); //문자열 길이에 받은 문자열의 길이를 저장
	if (firWord[length - 2] == nextWord[0] && firWord[length - 1] == nextWord[1]) { //두 단어를 비교, 한글은 2바이트이기 떄문에 2바이트를 비교해줌.
		changeword(); //마지막글자와 입력된 단어의 첫번째 글자가 같다면 마지막으로 입력된 단어를 변경
		return 1; //변경됨
	}
	else {
		return 0; //다름
	}
}

void WordGame::changeword() { //단어를 변경해주는 함수
	firWord = nextWord;//첫번째 단어와 이어진 단어 변경
}

int main() {
	int num = 0; //사람 수
	cout << "끝말 잇기 게임을 시작합니다." << endl;
	cout << "게임에 참가하는 인원은 몇 명입니까?";
	cin >> num; //사람 수 입력받음
	Player* p = new Player[num]; //사람객체를 입력받은 사람 수 만큼 생성

	for (int i = 0; i < num; i++) {//객체에 이름 입력
		p[i].getname(); 
	}
	cout << "시작 단어는 아버지입니다." << endl;

	int j = 0;
	WordGame Game; //게임 객체 선언
	while (1) { //break가 나올때까지 반복
		cout << p[j].peoplename() << ">>"; //이름 입력
		Game.getword(); //단어를 입력받음
		if (Game.equal() == 0) { //끝말잇기 규칙 적용 
			cout << p[j].peoplename() << "이(가) 졌습니다.";
			break;
		}
		j++; //4번을 넘는지 확인하기 위한 변수
		if (j >= num)
			j = 0; //횟수가4를 넘으면 처음으로 돌아감
	}
	delete[] p;//new 연산자 반환
}

#include <iostream>
using namespace std;

int GCD(int a, int b) {//최대공약수를 구하는 함수
	int tmp;//변수 선언
	while (b) {//반복루프
		tmp = a; //tmp에 a값 대입 1. 
		a = b; //a에 b의 값 대입 2.
		b = tmp % b;//tmp를 b로 나눈 나머지 를 b에 대입 3. (다시 1로)
	}
	return a; //a 반환
}

void LCD(int& a, int& b, int& lcd) {//call by reference 참조변수선언
	lcd = (a * b / GCD(a, b)); //최소공배수를 구하는 공식
}
int main() {
	int a = 0,  b = 0, gcd = 0, lcd = 0;//최대공약수 최소공배수 변수  초기화 
	cout << "양의 정수 a를 입력하세요>> ";
	cin >> a;//a 입력
	cout << "양의 정수 b를 입력하세요>> ";
	cin >> b;//b입력
	gcd = GCD(a, b); //lvalue에 오른쪽 값을 입력
	LCD(a, b,lcd); //함수선언 (참조 변수로 선언해줘야 맞는 값 얻을 수 있으므로)
	cout << "정수 " << a << ", " << b << "의 최대공약수는 " << gcd << ", " << "최소공배수는 " << lcd << "입니다. ";
}

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;

class String { //String Class선언
	int len_;//정수형 변수 선언
	char* str_;//문자열 포인터 선언, private
public:
	String(const char* str) {//char* 선언하기 위해 const 붙여줌
		len_ = strlen(str);//문자열 길이 입력
		str_ = new char[len_ + 1]; //new 연산자 이용, 기존 문자열+1개의 문자열 
		strcpy(str_, str); //문자열 복사
	}
	void Print() { //print 함수
		cout << str_ << endl; //복사한 문자열 출력
		delete[] str_;// delete연산자 사용, new 연산자 반환
	}
};

void ShowString(String str) {//showstring 함수
	str.Print();//매개변수(문자열)객체에 대한 print함수 사용
}
int main() {
	String str1 = "C++ programming";//str1은 C++ Programming
	ShowString(str1);//C++programming을 String class에 적용 후 연계과정 진행
}

'Electronic Engineering > C++' 카테고리의 다른 글

C++ 실습 과제 마지막  (0) 2022.07.05
C++ 실습 과제 3  (0) 2022.07.05
C++ 실습 과제  (0) 2022.07.05
C언어 Level Test  (0) 2022.07.05
2022 인하대학교 프로그래밍 대회 참가 후기  (0) 2022.05.21