我需要找到最常出现的单词并返回该值。我必须使用哈希映射,功能将采用文件名。这是我到目前为止所做的,但我非常困惑。
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;
}
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
我也很困惑!
for(int i = 0; i < 100; i++)
{
word_map[words[i]]++;
}
你在这做什么? 100来自哪里?你为什么要关心单词的单个字母(这是words[i]
给你的)?
如果我理解你的任务,那就不够了
++word_map[words];
代替?
另外,为什么要返回words
?它是一个字符串,你的函数应该返回和int。而是找到地图中最大的值,然后就完成了。
答案 1 :(得分:1)
您的代码中存在多个问题,可能导致其无法正常工作。
首先是i
循环。为什么你需要taht循环?保持这样,你需要数字。
while(in >> words)
{
word_map[words]++;
}
将words
重命名为word
,实际上您在这里阅读一个单词in >> words
。
第三个是return语句。当声明函数返回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
。