Найдите наиболее часто встречающееся слово, используя hashmaps Stack Overflow

Мне нужно найти наиболее часто встречающееся слово и вернуть это значение. Я должен использовать хэш-карты, и функция будет использовать имя файла. Это то, что я сделал до сих пор, но я очень смущен.

  int most_frequent_word(string filename)
{
string words;
ifstream in(filename.c_str());
unordered_map<string, int> word_map;
while(in >> words)
{

for(int i = 0; i < 100; i++)
{
word_map[words[i]]++;
}
}
return words;
}

любая помощь будет оценена. Спасибо!

-1

Решение

В вашем коде есть несколько проблем, из-за которых он может работать не так, как ожидалось.

Первый для i петля. Зачем вам вообще нужна петля? Оставьте это так, вам нужно считать слова.

while(in >> words)
{
word_map[words]++;
}

переименовывать words в wordна самом деле вы читаете одно слово здесь in >> words,

Третье — это заявление о возврате. Вы не можете вернуться string когда объявлено, что функция возвращает int,

Однако возвращать пока нечего, потому что пока мы знаем только номер каждого слова. Запустите цикл, чтобы найти максимальное значение.

int result = 0;
for(unordered_map<string, int>::iterator it = word_map.begin(); it != word_map.end(); it++)
result = max(result, it->second);
return result;

Вот word_map состоит из пар слова и его числа вхождений. Нам нужно перебрать все эти пары в поисках максимальных вхождений. Для этого мы используем итератор it,

1

Другие решения

Я тоже в замешательстве!

for(int i = 0; i < 100; i++)
{
word_map[words[i]]++;
}

Что ты здесь делаешь? Откуда эти 100? Почему вы заботитесь о единичных буквах ваших слов (что к чему words[i] получает вас)?

Если я правильно понимаю вашу задачу, не будет ли

++word_map[words];

вместо?

И почему ты возвращаешься words? Это строка, и ваша функция должна возвращать и int. Вместо этого найдите самое большое значение на вашей карте, и все готово.

1

По вопросам рекламы [email protected]