ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 10장 12번
    C++ 2018. 11. 17. 04:45

    12. Open Challenge를 수정하여 사용자가 어휘를 삽입할 수 있도록 기능을 추가하라. 


    소스코드


    #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 << "***** 영어 어휘 테스트를 시작합니다. *****" << 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 num;
            cout << "어휘 삽입: 1, 어휘 테스트 : 2, 프로그램 종료:그외키 >>";
            cin >> num;
            if (num == 1) { // 어휘 삽입
                cout << "영어 단어에 exit을 입력하면 입력 끝" << endl;
                while (true) {
                    string eng, kor;
                    cout << "영어 >>";
                    cin >> eng;
                    if (eng == "exit") break;
                    cout << "한글 >>";
                    cin >> kor;
                    v.push_back(Word(eng, kor)); // 입력을 받아 새로 추가합니다.
                }
            }
            else if (num == 2) {
                while (true) {
                    int index = rand() % v.size();
                    cout << v[index].getEng() << "?" << endl;
                    int exIndex = rand() % 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] = "";
    }


    케이스를 나눠서, 영어와 한글을 입력 받고, 벡터에 새로 추가해주면 됩니다.

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

    명품 C++ 10장 14번  (0) 2018.11.17
    명품 C++ 10장 13번  (0) 2018.11.17
    명품 C++ 10장 11번  (0) 2018.11.17
    명품 C++ 10장 10번  (0) 2018.11.17
    명품 C++ 10장 9번  (0) 2018.11.17

    댓글

© 2018 TISTORY. All rights reserved.