Нужна помощь с вводом C++
Есть задача:
Дан список стран и городов каждой страны. Затем даны названия городов. Для каждого города укажите, в какой стране он находится.
Входные данные Программа получает на вход количество стран N. Далее идет N строк, каждая строка начинается с названия страны, затем идут названия городов этой страны. В следующей строке записано число M, далее идут M запросов — названия каких-то M городов, перечисленных выше.
Примеры
входные данные
2
Russia Moscow Petersburg Novgorod Kaluga
Ukraine Kiev Donetsk Odessa
3
Odessa
Moscow
Novgorod
Идейно понятно что делать, но без понятия как осуществить ввод данных. Т.е. надо N раз считывать неограниченное количество строк, как это сделать?
Ответы (2 шт):
N раз считывать строку из неограниченного количества слов, а это уже совсем другое.
cin >> N;
for(int i = 0; i < N; ++i)
{
string s;
getline(cin,s);
// а вот тут уже разобрать строку s на название страны и города.
Как разбирать строку? Ну, я бы использовал istringstream, типа
istringstream ss(s);
s >> country;
while(s>>city) { /* работа с очередным городом */ }
Примерно так...
#include <iostream>
#include <vector>
#include <queue>
#include <string>
using namespace std;
int main() {
int n;
cin >> n;
queue<pair<string, vector<string>>> q;
for (int i = 0; i < n; i++) {
pair<string, vector<string>> p;
getline(cin, p.first);
string s;
getline(cin, s);
string k = "";
for (int j = 0; j < s.length(); j++) {
if (s[j] != ' ') {
k += s[j];
}
else {
p.second.push_back(k);
k = "";
j += 2;
}
}
q.push(p);
}
return 0;
}
Этот код дает тебе очередь с pair первая переменная это название страны, вторая переменная является вектором содержащим список городов.