2016-05-22 3 views
-1

The dictionary fileÜberprüfung zwei Strings auf Gleichheit mit einem Eingang und andere aus der Datei

Dies ist mein Code. Hier ist dict.txt die verknüpfte Datei. Die Zeichenkettensuche wird von einem Vektor initialisiert (möglich), der Zeichenketten enthält. Ich benutze getline, um aus der Datei zu lesen und jede Zeile in der Zeichenfolge temp zu speichern. Nun ist das Problem, wenn ich search == temp ausführen, ist die Ausgabe falsch, was wahr sein sollte. Ich muss die Zeichenfolge aus der Wörterbuchdatei ausdrucken. Also entziehe ich jede Zeile aus der Datei und vergleiche aber die Gleichheit ist irgendwie abgehört oder ich mache irgendwo ein Problem.

ifstream infile("namenumdict.txt"); 
    string search="", temp=""; 
    int k=0; 
    for(int i=0; i<possible.size(); i++) 
    { 
     search=possible[i]; 
     while(getline(infile, temp)) 
     { 
      if(search==temp) 
      { 
       fout<<temp<<endl; 
       k++; 
      } 

     } 
    } 

Ich habe durch Debugging überprüft, dass alle Dinge gut funktionieren. search wird ebenso initialisiert wie temp.

Bitte lassen Sie mich das Problem wissen. Danke

+1

Unrelated: Wollten Sie nur nach dem ersten Eintrag in 'possible []' suchen? Wenn Sie einmal auf eine Zeichenfolge stoßen, die sich NICHT in der Datei befindet (von dem Punkt aus, an dem Sie zuletzt Ihre Suche abgebrochen haben), sind keine weiteren Suchen erfolgreich, da "infile" auf eof steht. – WhozCraig

+0

Ja, WhozCraig hat Recht. Verschieben Sie die 'mögliche' Schleife in die' while (getline() ...) 'Schleife –

+0

@WhozCraig Ja! Ich habe es zum ersten Mal versucht, also habe ich nicht darüber nachgedacht. Vielen Dank. – SVG

Antwort

2

Es gibt ein paar mögliche gotchas. Windows beendet Zeilen mit \r\n, aber Linux nur \n. Wenn Sie dies unter Linux ausführen, aber eine Datei verwenden, die von Windows stammt, enthält die Zeichenfolge das \r, das vor dem \n angezeigt wird. Suchen Sie nach \r am Ende der Zeichenfolge und entfernen Sie es.

Die andere Möglichkeit ist, dass Sie "WORD" mit "Wort" vergleichen. Um dies zu umgehen, müssen beide Strings (oder beide Großbuchstaben) vor dem Vergleich in Kleinbuchstaben geschrieben werden.

Explosion aus der Vergangenheit: Die \r\n stammt aus der alten Ära der Fernschreiber Maschinen. Sie mussten eine Wagenrückgabe machen (\r), um zum Anfang der Linie zurückzukehren, dann eine neue Linie (\n), um auf eine neue Linie zu fallen.

Verwandte Themen