C++ Wörter Zählen

rony12

Commodore Pro
Registriert
Jan. 2007
Beiträge
4.959
Hallo,

ich bastel gerade etwas mit C++ rum, und sollte da die Anzhal der jeweiligen Wörter aus einer Textdatei einlesen....

Bevor ich das machte, habe ich mir die einzelnen Zeichen ausgeben lassen :) - soetwas will ich nun mit eben wörtern machen... stehe da nun aber wie der Ochse vorm Berg. :/

Hier der Code für das zählen der einzelnen Zeichen:


Code:
ifstream in("glocke");  // <- Das ist die Textdatei
 ostringstream s; 
 s << in.rdbuf(); // std::ostream& operator<<(std::ostream&, std::streambuf*) liest den kompletten Inhalt 
 string myData = s.str(); // myData ist dann der String mit all dem Text

 map<char, int> buchstaben;
 
 for (int i = 1; i < myData.size(); i++) {
     char temp = tolower(myData[i]);
     buchstaben[temp]++;
 }
 
 for(map<char, int>::iterator ii=buchstaben.begin(); ii!=buchstaben.end(); ++ii)
 {
     cout << (*ii).first << ": " << (*ii).second << endl;
 }

Das funktioniert :)

nun hatte ich für das Zählen von wörtern folgenden Code bei google gefunden...

http://tizian.cs.uni-bonn.de/Lehre/Seminare/ProgPearls01/Ausarbeitungen/wingender/sop04.html

Da da ist mir nicht alles klar, auch wenn dieser sehr leicht ausschaut :/


Hat jemand einen Tipp?
 
Was genau verstehst Du nicht? Weißt Du denn bereits , was Bäume und Hashtables sind und wie sie funktionieren?
 
Ich hab da einen Tip: Salz ist geeignet um allerhand Speisen zu verfeinern - jedoch nur in Maßen!

Scherz beiseite, formulier doch mal eine Frage, auf die man auch eine Antwort geben kann. Hier sind hunderte hilfsbereite Menschen, du musst ihnen aber eine Chance geben^^
 
Nur so als Idee ohne die Lösung angeguckt zu haben:

Geh in die ASCII Tabelle und such dir doch Leerzeichen raus. Dann immer wenn ein Leerzeichen kommt hochzählen. Dann hast alle Wörter gezählt.
Leerzeichen kann ja einfach mit einer Abfrage auf den entsprechenden Code rausfiltern. Wenn du nen String hast auch einfach auf den passenden, leeren char ;)
 
IC3HANDS: Leerzeichen sind ja nur die halbe Wahrheit, du müsstest zusätzlich cariage returns, linefeeds, doppelte usw. beachten.

Was ist mit fehlenden Leerzeichen bei Punktuation?Wie hier,meine ich.
 
Er möchte ja nur die Lösung aus dem Link erklärt bekommen. Hinbekommen hat er's ja. Das war ja oben auch mein Fehler, dass ich den Post nicht ganz zuende gelesen habe... ;)

gruß
hostile
 
Also du willst wissen, wie der Code funktioniert:
Der Hauptteil ist
Code:
cin>>t
Vorher hattest du als Token einzelne Buchstaben, jetzt einzelne Wörter, also...
Lese jedes Wort ein und merk dir welches (M[t]++;)

Persönlich finde ich die Variante schön und clever, weil die ganze "Was ist ein Wort/Wortanfang/Ende blah"-Fragerei einfach auf die C++-STL abgewälzt wird.
 
Zurück
Oben