프로그래밍 공부
명품 C++ Programming Open Challenge 4장 한글 끝말잇기 게임 본문
Programming/명품 C++ Programming
명품 C++ Programming Open Challenge 4장 한글 끝말잇기 게임
khj1999 2019. 5. 6. 16:46C++를 시작한지 얼마안된 학생입니다.
객체지향이라는걸 완벽히 이해하지 못하여서 틀린것이나 오류가 있을수 있으니.
참고용으로만 사용해주시면 감사하겟습니다.
#include <iostream>
#include <string>
using namespace std;
class game { // 끝말잇기 게임 class 선언
string str; // 문자열을 입력받을 변수.
string start = "아버지"; // 끝말잇기 시작 문자와 string class.
int cnt = 0; // 이름을 출력하기 위한 변수.
public:
string input() { // 문자열 입력함수.
string s;
cin >> s; // s에 값을 대입.
return s; // s를 반환.
}
bool compare(string s1, string s2) { // 문자열 비교함수
int len = s1.length(); // 문자열의 길이 // 한글 문자열은 2바이트이므로 문자열의 끝 2바이트와 시작부분 2바이트를 비교해준다.
if ((s1[len - 1] == s2[1]) && (s1[len - 2] == s2[0])) { return true; } // 문자열의 길이를 구해서 맨끝의 공백을 제외한 s1[len - 1] 와 s2[1]을 비교 s1[len - 2] 와 s2[0] 을 비교한다.
else { return false; }
} // 문자열 길이가 같으면 True 다르면 false 반환.
void running(string *name, int n) { // 끝말잇기 실행부분.
while (1) {
cout << name[cnt] << ">>"; // 입력하는 사람의 이름 출력.
str = input();
if (compare(start, str) == false) { // 문자열 비교. compare함수의 반환 값이 false 일때 실행.
cout << name[cnt] << "(이)가 패배 하였습니다." << endl;
break; // 패배할결우 while문 종료.
}
else {
start = str; // 함수의 반환값이 false가 아닐경우 이전에 입력했던 문자열을 다음 입력이랑 비교할 문자열에 대입
}
cnt++; // 이름을 출력하기 위해 cnt++
if (cnt == n) cnt = 0; // cnt변수가 n이 될 경우 cnt = 0.
} // cnt를 0으로 초기화 안해줄경우 배열의 범위 초과 쓰래기 값 출력하게 됨.
}
};
int main() {
int n;
game wordgame; // class 선언.
cout << "끝말 잇기 게임을 시작합니다\n게임에 참가하는 인원은 몇명입니까?";
cin >> n; // 게임의 참가 인원수 입력.
string *name = new string[n]; // 참가 인원만큼 string class 동적할당.
for (int i = 0; i < n; i++) { // n만큼 반복.
cout << "참가자의 이름을 입력하세요. 빈칸 없이>>";
cin >> name[i]; // 이름 입력.
}
cout << "시작하는 단어는 '아버지' 입니다." << endl;
wordgame.running(name, n); // 실행 부분
return 0;
}
아직 잘모르는 초보자임을 감안하고 봐주시면 감사하겟습니다.
틀린부분, 오류 지적해주시면 감사하겟습니다.
'Programming > 명품 C++ Programming' 카테고리의 다른 글
명품 C++ Programming Chapter 05 실습문제 (0) | 2021.02.25 |
---|---|
명품 C++ Programming Chapter 04 실습 문제 (0) | 2021.02.24 |
명품 C++ Programming CHAPTER 03 OpenChallenge (0) | 2021.02.22 |
Comments