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가 입력되면 퀴즈가 종료되도록 합니다.

 

+ Recent posts