ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 10장 10번
    C++ 2018. 11. 17. 02:24

    10. 나라의 수도 맞추기 게임에 vector를 활용해보자. 나라 이름(nation)과 수도 (capital) 문자열로 구성된 Nation 클래스를 만들고, vector<Nation> v;로 생성한 벡터를 이용하여 나라 이름과 수도 이름을 삽입할 수도 있고 랜덤하게 퀴즈를 볼수도 있다. 프로그램 내에서 벡터에 Nation 객체를 여러 개 미리 삽입하여 퀴즈를 보도록 하라. 실행 화면은 다음과 같으며, 저자는 9개 나라의 이름과 수도를 미리 프로그램에서 삽입하였다. 문자열을 string 클래스를 이용하라.


    소스코드


    #include <iostream>
    #include <vector>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    class Nation {
        string nation;
        string capital;
    public:
        Nation() {}
        void set(string nation, string capital) { this->nation = nation; this->capital = capital; }
        string getNation() { return nation; }
        string getCapital() { return capital; }
    };
    int main() {
        srand((unsigned)time(0));
        vector<Nation> v;
        string sNation[] = { "대한민국","일본","중국","미국","독일","캐나다","호주","오스트리아","러시아" };
        string sCapital[] = { "서울","도쿄","베이징","와싱턴","베를린","오타와","캔버라","빈","모스크바" };
        for (int i = 0; i < 9; ++i) { // vector 값들 초기화
            Nation n;
            v.push_back(n);
            v[i].set(sNation[i],sCapital[i]);
        }
        cout << "***** 나라의 수도 맞추기 게임을 시작합니다. *****" << endl;
        for (;;) {
            cout << "정보 입력 : 1, 퀴즈 : 2, 종료 : 3 >>";
            int num; cin >> num;
            if (num == 1) {
                cout << "현재" << v.size() << "개의 나라가 입력되어 있습니다."<<endl;
                cout << "나라와 수도를 입력하세요(no no 이면 입력끝)" << endl;
                for (;;) {
                    bool sw = false;
                    cout << v.size() + 1 << ">> ";
                    string nat, cap; // 입력 받을 나라와 수도;
                    cin >> nat >> cap;
                    if (nat == "no" && cap == "no") {
                        break;
                    }
                    for (int i = 0; i < v.size(); ++i) { // 이미 존재하는 나라인지 확인
                        if (v[i].getNation() == nat) {
                            cout << "alreday exists !!!" << endl;
                            sw = true;
                            break;
                        }
                    }
                    if (sw == false) { // 새로운 나라를 입력 받는 거라면
                        Nation n; // 객체를 생성하여
                        v.push_back(n); // 벡터에 집어넣고
                        v[v.size()-1].set(nat, cap); // 나라와 수도 값 설정
                    }
                }
            }
            else if (num == 2) { // 퀴즈
                for (;;) {
                    int r = rand() % v.size(); // 벡터 크기 범위의 난수 생성 0~벡터의 마지막 인덱스
                    cout << v[r].getNation() << "의 수도는?";
                    string text; cin >> text; // 정답 입력받기
                    if (text == "exit") break; // 탈출
                    if (v[r].getCapital() == text) cout << "Corret !!" << endl; // 정답일때
                    else cout << "NO !!" << endl; // 오답일때
                }
            }
            else if (num == 3) {
                break;
            }
            else cout << "입력 오류" << endl;
        }

    }


    실행결과



    vector 클래스를 이용해 배열을 다루는 문제입니다. 배열에 삽입 할때 객체를 생성하여 객체를 삽입 후, 객체의 멤버 값을 설정하였습니다. 이미 있는 나라라면 추가하지 않습니다.

    퀴즈에서는 난수를 통해 배열에 접근하여 퀴즈를 냈습니다.

    'C++' 카테고리의 다른 글

    명품 C++ 10장 12번  (0) 2018.11.17
    명품 C++ 10장 11번  (0) 2018.11.17
    명품 C++ 10장 9번  (0) 2018.11.17
    명품 C++ 10장 8번  (0) 2018.11.17
    명품 C++ 10장 7번  (0) 2018.11.17

    댓글

© 2018 TISTORY. All rights reserved.