ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 10장 Open Challenge
    C++ 2018. 11. 17. 23:24

    영어 어휘 테스트 프로그램 작성


    영어 단어의 뜻 맞추기 게임을 만들어 보자. 영어 단어와 한글 단어로 구성되는 Word 클래스를 작성하고, vector<Word> v;로 벡터를 생성하고, 프로그램 내에서 여러 개의 Word 객체를 벡터에 삽입해 둔다. 그리고 다음 화면과 같이 랜덤하게 사용자에게 문제를 던지며, 4개의 한글 보기를 출력한다. 4개의 보기 중 정답을 제외한 3개는 벡터에 있는 단어 중에서 랜덤하게 선택한다. 이 문제에서 iterator는 사용할 필요 없다.


    소스코드


    #include <iostream>
    #include <string>
    #include <vector>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    class Word {
        string english;
        string korean;
    public:
        Word(string eng,string kor) {
            this->english = eng;
            this->korean = kor;
        }
        string getEng() { return english; }
        string getKor() { return korean; }
    };
    int main() {
        string example[4] = { "" };
        bool sw = false;
        srand((unsigned)time(0));
        cout << "영어 어휘 테스트를 시작합니다. 1~4 외 다른 입력시 종료합니다." << endl;
        vector<Word> v;
        v.push_back(Word("human", "인간"));
        v.push_back(Word("baby", "아기"));
        v.push_back(Word("society", "사회"));
        v.push_back(Word("photo", "사진"));
        v.push_back(Word("painting", "그림"));
        v.push_back(Word("love", "사랑"));
        v.push_back(Word("emotion", "감정"));
        v.push_back(Word("dall", "인형"));
        v.push_back(Word("animal", "동물"));
        v.push_back(Word("bear", "곰"));
        v.push_back(Word("trade", "거래"));
        int n;
        while (true) {
            int index = rand() % v.size();
            cout << v[index].getEng() << "?" << endl;
            int exIndex = rand() % 4; // 4개중에 하나에 정답 넣기
            example[exIndex] = v[index].getKor();
            for (int i = 0; i < 4 ; ++i) {
                if (i != exIndex) { // 정답을 제외하고 남은 칸에 보기 추가
                    sw = true;
                    while (sw) { // 보기에 중복이 없게 하기
                        n = rand() % v.size();
                        if (example[0] != v[n].getKor() &&
                        example[1] != v[n].getKor() &&
                        example[2] != v[n].getKor() &&
                        example[3] != v[n].getKor())
                        {
                            example[i] = v[n].getKor();
                            sw = false;
                        }
                    }
                }
            }
            for (int i = 0; i < 4; ++i)
                cout << "(" << i + 1 << ") " << example[i]<<' ';
            cout << ":>";
            int answer;
            cin >> answer;
            if (answer >= 1 && answer <= 4) {
                if (exIndex == answer-1)
                    cout << "Excellent !!" << endl;
                else
                    cout << "No. !!" << endl;
            }
            else
                break;
        }
        for (int i = 0; i < 4; ++i) // 초기화를 안해주면 중복인지 확인할 때 문제가 생김
            example[i] = "";
    }


    실행결과



    vector 컨테이너 클래스를 다루는 문제입니다.

    Word 클래스를 만들고 생성자를 통하여 초기화 후, 벡터에 삽입합니다.

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

    명품 C++ 10장 16번  (0) 2018.11.17
    명품 C++ 10장 15번  (0) 2018.11.17
    명품 C++ 10장 14번  (0) 2018.11.17
    명품 C++ 10장 13번  (0) 2018.11.17
    명품 C++ 10장 12번  (0) 2018.11.17

    댓글

© 2018 TISTORY. All rights reserved.