Входные данные :
Today я eat bread. Today я eat cookies.
Вывод:
eat: 2
I: 2
Today: 2
bread: 1
cookies: 1
Я должен сделать программу, которая подсчитывает количество раз, когда на входе появляется слово. Тогда, если количество раз совпадает между некоторыми словами, я показываю их в алфавитном порядке. До сих пор я это делал:
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int countt (string text);
int main () {
string text;
while (getline(cin,text)) //Receive the input here
countt(text); //Send the input to countt
return 0;
}
int countt (string text) {
int i,j;
string aux; //I make a string aux to put the word to compare here
for (std::string::const_iterator i = text.begin(); *i != ' '; i++){
for (std::string::const_iterator j = aux.begin(); j != text.end(); j++)
*j=*i; //But here an error is given: 25:9: error: assignment of read-only location ‘j.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator*<const char*, std::basic_string<char> >()
}
}
Спасибо заранее.
Ссылаясь конкретно на комментарий об ошибке, который у вас есть в вашем коде:
В вашем цикле for
вы используете const_iterator
а затем вы разыскиваете этот итератор и назначаете ему, что вам не разрешено делать, потому что оно const
.
Повторите попытку с помощью string::iterator
.
Прочитайте строку в строке, как и сейчас. Но затем используйте std::istringstream
для токенизации ввода. Используйте std::unordered_map
для хранения слов в виде ключей и подсчета в качестве данных.