2016-03-19 32 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 –