getline не работает и выдает ошибку
Что нужно сделать, чтобы getline заработал. Выводит вот такую ошибку. Использовал cin.ignore(). но ошибка осталась.
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
int main() {
int kov;
cin >> kov;
map <string, vector <string>> m;
map <string, vector <string>> m1;
for (int i = 0; i < kov; i++) {
string s, word, els;
vector <string> v = {""};
getline(cin, s);
for (int j = 0; j < s.size() - 1; j++) {
if (s[j] != ' ') {
word.push_back(s[j]);
}
if (s[j] == '-') {
els.push_back(s[j + 1]);
}
}
cout << word;
for (char j : els) {
if (j == ',') {
v.push_back("");
}
else {
v.back().push_back(j);
}
}
m[word] = v;
}
for (auto i : m) {
cout << i.first << " : ";
for (string j : i.second) {
cout << j << " ";
}
cout << "\n";
}
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Я бы делал так:
int main()
{
map<string,set<string>> dict;
for(string s; getline(cin,s);)
{
char * c = strtok(s.data()," -");
string e = c;
for(c = strtok(0," -,");c;c = strtok(0," -,"))
{
string l = c;
dict[l].insert(e);
}
}
cout << dict.size() << endl;
for(const auto& d: dict)
{
cout << d.first << " - ";
bool comma = false;
for(const auto& c: d.second)
{
if (comma) cout << ", ";
cout << c;
comma = true;
}
cout << endl;
}
}
И если это вот эта задача, то учтите, что они нахомутали: в условии сказано, что первая строка — число N, но на самом деле никакой строки с числом там нет...


