2016-03-19 13 views
-1

最も頻繁に出現する単語を見つけてその値を返す必要があります。私はハッシュマップを使用する必要があり、fuctionはファイル名をとる。これは私がこれまで行ってきたことですが、私は非常に混乱しています。ハッシュマップを使用して最も頻繁に使用する単語を見つける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ループです。なぜあなたはtahtループが必要でしょうか?このままにしておくと、言葉を数える必要があります。

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

実際にあなたがここに一言in >> wordsを読んでいる、wordwordsの名前を変更します。

3番目は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とintを返さなければなりません。代わりに、マップ内で最大の値を見つけたら、完了です。

+0

私はこのハッシュマップと非常に混同していますが、100値をランダムな値xD –

+1

@ JeanAlexanderと書いています。これはめったにプログラミングの成功戦略ではありません.-P – nijansen

+0

haha​​ha私はそう思います! xD –

関連する問題