Мне нужно найти наиболее часто встречающееся слово и вернуть это значение. Я должен использовать хэш-карты, и функция будет использовать имя файла. Это то, что я сделал до сих пор, но я очень смущен.
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;
}
любая помощь будет оценена. Спасибо!
В вашем коде есть несколько проблем, из-за которых он может работать не так, как ожидалось.
Первый для 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
,
Я тоже в замешательстве!
for(int i = 0; i < 100; i++)
{
word_map[words[i]]++;
}
Что ты здесь делаешь? Откуда эти 100? Почему вы заботитесь о единичных буквах ваших слов (что к чему words[i]
получает вас)?
Если я правильно понимаю вашу задачу, не будет ли
++word_map[words];
вместо?
И почему ты возвращаешься words
? Это строка, и ваша функция должна возвращать и int. Вместо этого найдите самое большое значение на вашей карте, и все готово.