2016-03-19 33 views
-1

我需要找到最频繁出现的单词并返回该值。我必须使用哈希映射,并且功能需要一个文件名。这是我迄今为止所做的,但我很困惑。使用hashmaps查找最频繁的单词C++

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]++; 
} 

重命名wordsword,其实你在这里in >> words读一个字。

第三个是return语句。当声明函数返回int时,您不能返回string

但是没有什么可以回报的,因为到目前为止我们只知道每个单词发生的数量。运行一个循环来查找最大值。

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

+0

你能解释一下吗?我真的不明白这一点。 –

+0

@Jean Alexander,你在说要找到最大值吗? –

+0

是的,我是xD我不明白map.get或map.end那是什么? –

1

我也很困惑!

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

你在这里做什么? 100从哪里来?为什么你会喜欢你单词的单个字母(words[i]会给你什么)?

如果我正确理解你的任务,是不是足以

++word_map[words]; 

呢?

另外为什么你要退回words?这是一个字符串,你的函数应该返回int。相反,要找到地图中最大的值,就完成了。

+0

对不起,我很困惑这个散列映射我刚刚写了100作为一个随机值xD –

+1

@JeanAlexander这很少是编程时成功的策略:-P – nijansen

+0

哈哈哈我想是的! xD –