Ошибка с выводом при поиске повторяющихся слов в строке в C

#c #maps

#c #Карты

Вопрос:

не могли бы вы сказать мне, почему в моем выводе появляется 1, в то время как я отслеживаю слова и их вхождение в заданную строку с помощью карт?

 string x="Hello World Hello World";
//getline(cin,x);

map<string,int> store;
stringstream s(x);

do
{
    string y;
    s>>y;
    if(store.find(y)!=store.end())
    {
        auto it=store.find(y);
        it->second  ;
    }
    else
        store.insert(pair<string,int>(y,1));
}while(s);
map<string, int>::iterator itr; //common for all maps

 for(itr=store.begin();itr!=store.end();  itr)
    cout<<itr->first<<" "<<itr->second<<endl; 
  

Вывод:

  1
Hello 2
World 2 
  

Комментарии:

1. После того, как вы прочитали последнее "World" , s все еще хорошо. Итак, цикл выполняет еще одну итерацию. Там s>>y происходит сбой и y остается пустая строка — но вы все равно ее обрабатываете.

Ответ №1:

Я исправил другую часть условия, используя y.length()> 0, и теперь, похоже, все работает нормально.