Programm zum zählen bestimmter Worte- wo ist der Denkfehler?



  • Hallo.
    Ich versuche nun ungerfähr schon seit einer Stunde, zu verstehen, was mit diesem simplen Programm nicht stimmt.
    Ist ne Aufgabe aus einem Buch.
    Und zwar soll es in einer Textdatei nach einem bestimmten Wort suchen und dann ausgeben, wieviele in der gesamten Datei davon vorhanden sind.

    Mein code sieht folgendermaßen aus:

    #include <string>
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main() {

    ifstream in ("bla.txt");
    string s= "sdfg";
    string p;
    int a=0;

    while (getline(in, p, ' ')){
    if (p==s){a++;}
    }

    cout<<a;
    cin.get();
    }

    die datei bla so:

    aa aa aa sdfg
    sdfsd dd

    Jetzt legt das Programm ein komisches Verhalten an den Tag: Wenn ich nach "aa" suche, findet es die korrekte Zahl 3. Bei dd findet es auch 1. Aber wenn ich sdfg eingebe findet es nichts, ebenso für sdfsd (ja, ich weiß, nette wörter).
    Ich versteh absolut nicht, warum.
    Der Logik nach gibt es einen String, der mit dem gesuchten Wort belegt ist, einen, in den später das jeweilige wort gelegt wird und eine int, die die wörter zählt.
    In der schleife wird jetzt die datei, die bei ifstream in eingelesen wurde genommen und alles bis zum ersten leerzeichen in den String p gelegt.
    Im folgenden wird p mit s abgeglichen, wenn p==s ist, dann wird a um eins größer. Wenn nicht, geht die schleife weiter, solange, bis getline keine strings mehr einlesen kann.
    Wo liegt denn jetzt mein Denkfehler?



  • Liegt wahrscheinlich am Delimiter. Pack die 'Wörter' in deiner Textdatei mal in eine einzige Zeile, dann weißt du was ich meine.



  • Ganz grob ins blaue: Du benutzt als Delim-char ein Leerzeichen. Aber hinter deinem sdfg is nur ein Zeilenumbruch. Mach dahinter mal ein leerzeichen und es sollte klappten.



  • ***gelöscht***
    edit: Tut doch gar nicht not, gegenüber Neulingen unhöflich zu werden. Bitte vermehrt die Profis beleidigen und im Gegenzug den Neulingen konstruktiv helfen.
    edit2: Ich sehe, daß Du vorher konstruktiv geholfen hast und freue mich.



  • Hmm, ok, wenn alles in einer zeile liegt, funktionert es. Ich verstehe aber nicht so recht warum, der delimiter ist bei mir doch ' ' und nicht mehr '\n'.
    Bzw gibt es eine Möglichkeit, das mit getline zu lösen oder muss ich das anders machen? (aber bitte keine komplette lösung angeben)
    EDIT: 1. bin jetzt von selbst drauf gekommen 2. hab die zweiten zwei posts nicht gelesen, war am tippen währenddessen. danke, jetzt versteh ich das problem.


Anmelden zum Antworten