1. 문제
10. 나라의 수도 맞추기 게임에 vector를 활용해보자. 나라 이름(nation)과 수도(capital) 문자열로 구성된 Nation 클래스를 만들고, vector<Nation> v;로 생성한 벡터를 이용하여 나라 이름과 수도 이름을 삽입할 수도 있고 랜덤하게 퀴즈를 볼 수도 있다.
프로그램 내에서 벡터에 Nation 객체를 여러 개 미리 삽입하여 퀴즈를 보도록 하라. 실행 화면은 다음과 같으며, 저자는 9개 나라의 이름과 수도를 미리 프로그램에서 삽입하였다.
문자열을 string 클래스를 이용하라.
2. 결과
3. 코드
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
class Nation {
string nation;
string capital;
public:
Nation() { ; }
void setNation(string na, string ca) {
nation = na;
capital = ca;
}
string getNation() { return nation; }
string getCapital() { return capital; }
};
int main() {
vector<Nation> v;
Nation n;
n.setNation("한국", "서울");
v.push_back(n);
n.setNation("중국", "베이징");
v.push_back(n);
n.setNation("일본", "도쿄");
v.push_back(n);
n.setNation("베트남", "하노이");
v.push_back(n);
n.setNation("인도", "뉴델리");
v.push_back(n);
n.setNation("필리핀", "마닐라");
v.push_back(n);
n.setNation("타이", "방콕");
v.push_back(n);
n.setNation("몰디브", "몰레");
v.push_back(n);
n.setNation("미국", "와싱턴");
v.push_back(n);
srand((unsigned)time(0));
int sel;
bool exit = true;
string na, ca;
int num = v.size() + 1;
int choice = 0;
int random;
cout << "***** 나라의 수도 맞추기 게임을 시작합니다. *****" << endl;
while (exit) {
cout << "정보 입력: 1, 퀴즈: 2, 종료: 3 >> ";
cin >> sel;
switch (sel) {
case 1:
cout << "현재 " << v.size() << "개의 나라가 입력되어 있습니다." << endl;
cout << "나라와 수도를 입력하세요(no no 이면 입력끝)" << endl;
while (1) {
cout << num << ">>";
cin >> na >> ca;
for (int i = 0; i< num - 1; i++) {
if (v[i].getNation() == na) {
cout << "already exists !!" << endl;
choice = 1;
break;
}
}
if (na == "no" && ca == "no") break;
else if (choice == 0) {
n.setNation(na, ca);
v.push_back(n);
num++;
}
choice = 0;
}
break;
case 2:
while (1) {
random = rand() % v.size();
cout << v[random].getNation() << "의 수도는?";
cin >> ca;
if (ca == "exit") break;
if (v[random].getCapital() == ca)
cout << "Correct !!" << endl;
else
cout << "NO !!" << endl;
}
break;
case 3:
exit = false;
break;
}
}
}
4. 설명
나라 이름과 수도 이름을 가지고 있는 Nation 클래스를 만든 후 이를 vector의 push_back으로 삽입합니다.
1번 입력에서 나올 때는 no no 즉 나라 이름과 수도 이름으로 no가 입력되었을 때 입력을 종료하도록 합니다.
2번 퀴즈에서는 exit가 입력되면 퀴즈가 종료되도록 합니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 10장 12번 (0) | 2019.05.13 |
---|---|
명품 C++ programming 실습문제 10장 11번 (0) | 2019.05.13 |
명품 C++ programming 실습문제 10장 9번 (0) | 2019.05.12 |
명품 C++ programming 실습문제 10장 8번 (0) | 2019.05.12 |
명품 C++ programming 실습문제 10장 7번 (0) | 2019.05.11 |