-
명품 C++ 4장 Open ChallengeC++ 2018. 10. 30. 02:53
n명이 하는 한글 끝말잇기 게임을 작성해보자. 아래의 결과와 같이 선수의 수를 입력받고, 선수 각 사람의 이름을 입력받아 게임을 시작한다.
소스코드
#include <iostream>using namespace std;#include <string>class Player {string name;public:void setName(string name) { this->name = name; }string getName() { return name; }};class WordGame {Player *p;int num;public:WordGame(int num);~WordGame() { delete[] p; }void game();};WordGame::WordGame(int num) {this->num = num;p = new Player[num];}void WordGame::game() {string n;for (int i = 0; i <num; ++i) {cout << "참가자의 이름을 입력하세요. 빈칸 없이>>";cin >> n;p[i].setName(n);}cout << endl;cout << "시작하는 단어는 아버지입니다" << endl;string a = "아버지";string b;int i = 0;for (;;) {cout << p[i%num].getName() << ">>";cin >> b;int j = a.size();if (a.at(j - 2) == b.at(0) && a.at(j - 1) == b.at(1)) {a = b;}else {cout << p[i%num].getName() << "탈락!!"<<endl;break;}++i;}}int main() {cout << "끝말 잇기 게임을 시작합니다" << endl;cout << "게임에 참가하는 인원은 몇명입니까?";int num;cin >> num;WordGame wordgame(num);wordgame.game();}실행결과
WordGame 클래스 - 끝말잇기 게임 전체를 운영하는 클래스
Player 클래스 - 선수를 표현하는 클래스
main() 함수 - WordGame 객체를 생성하고 게임을 시작하는 함수
한글은 2바이트 코드로 저장되므로 string 객체에 저장된 한글 문자열에서 끝 글자를 비교하려면 두 바이트를 함께 비교하여야 합니다.
if (a.at(j - 2) == b.at(0) && a.at(j - 1) == b.at(1))
앞 문자열 끝에 두 바이트와 뒷 문자열 앞에 두 바이트를 비교하여 끝말잇기가 성공했는지 확인하는 코드
'C++' 카테고리의 다른 글
명품 C++ 5장 2번 (0) 2018.10.31 명품 C++ 5장 1번 (0) 2018.10.31 명품 C++ 4장 14번 (1) 2018.10.30 명품 C++ 4장 13번 (0) 2018.10.30 명품 C++ 4장 12번 (0) 2018.10.30