2016-03-19 9 views
-1

Ich muss das am häufigsten vorkommende Wort finden und diesen Wert zurückgeben. Ich muss Hash-Maps verwenden und die Funktion würde einen Dateinamen annehmen. Das habe ich bisher gemacht, aber ich bin sehr verwirrt.Finden Sie das am häufigsten verwendete Wort mit 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; 
    } 

jede Hilfe würde es geschätzt werden. Vielen Dank!

Antwort

1

Es gibt mehrere Probleme in Ihrem Code, die dazu führen könnten, dass es nicht wie erwartet funktioniert.

Zuerst ist für i Schleife. Warum solltest du die Schleife überhaupt brauchen? Lass es so, du musst Wörter zählen.

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

words zu word umbenennen, Sie sind eigentlich ein Wort hier in >> words lesen.

Die dritte ist Return-Anweisung. Sie können string nicht zurückgeben, wenn die Funktion int zurückgegeben wird.

Es gibt jedoch noch nichts zurückzugeben, weil wir bisher nur die Nummer jedes Wort kennen. Führen Sie eine Schleife aus, um den maximalen Wert zu finden.

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 Hier besteht aus Paaren eines Wortes und seine Anzahl des Auftretens. Wir müssen über alle diese Paare iterieren, um nach maximalen Vorkommen zu suchen. Dazu verwenden wir den Iterator it.

+0

Kannst du mir das bitte erklären? Ich verstehe es wirklich nicht. –

+0

@Jean Alexander, sprichst du über den maximalen Wert zu finden? –

+0

Ja ich bin xD Ich verstehe nicht, dass map.get oder map.end was ist das? –

1

Ich bin auch verwirrt!

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

Was machst du hier? Woher kommt die 100? Warum interessierst du dich für einzelne Buchstaben deiner Wörter (was wird words[i] bekommt Sie)?

Wenn ich Ihre Aufgabe richtig verstanden habe, würde es nicht genügen

++word_map[words]; 

statt?

Auch warum geben Sie words zurück? Es ist eine Zeichenfolge und Ihre Funktion sollte zurückgeben und int. Finde stattdessen den größten Wert in deiner Karte und du bist fertig.

+0

Sorry ich bin sehr verwirrt mit diesem Hash-Karten Ich schrieb nur 100 als Zufallswert xD –

+1

@JeanAlexander das ist selten eine erfolgreiche Strategie beim Programmieren :-P – nijansen

+0

hahaha ich denke schon! xD –

Verwandte Themen