Probleme mit string
-
Hallo erstmal bin neu hier

hoffe jemand kann mir helfen. habe folgendes problem.
lese mit getline() sting's zeilenweise aus einer textdatei und vergleiche dies dann mit einem festen wert. dann bearbeite ich den zu vergleichenden string und durchlaufe nochmals die while schleife (string lesen => vergleich).
Doch nach dem bearbeiten des strings ist der vergleich immer ungleich.

Weiß jemand warum.using namespace std; void main() { sting suchWort; cin>>suchWort; int i; for (i=1;i<=2;i=i+1) { slaenge = sizeof(suchWort); datei.seekg(0); // Auf Anfang setzen while (!datei.eof()) { getline(datei, s); iZaehler++; if (s==suchWort) cout<<"Word "<< s <<"gefunden"; } int ii; for (ii=slaenge;ii>=1;ii=ii-1) { suchWort[ii]=suchWort[ii-1]; // Datei wieder schließen } suchWort[0]=suchWort[slaenge]; suchWort[slaenge]='\0'; cout<<suchWort<<endl; } datei.close(); // Datei schliessen }gruß willi
-
hi,
um ehrlich zu sein bezweifele ich absolut das jemand versteht was dein code machen soll.
Es wäre besser wenn du ein paar mehr informationen liefern würdest. Ich spekuliere das du folgendes vorhast:std::string line; std::string s = hallo; while(getline(datei, line)) // Lese je eine Zeile und das bis Dateiende { iZaehler++; // Zeilen zählen? if (s==line) // Vergleicht ob die Zeile die du eingelesen hast Hallo enthält cout<<"Wort "<< s <<"gefunden"; }Was du nun mit probant anstellst bzw anstellen willst konnte ich nicht so ganz nachvollziehen, genauso wenig woher probant eigentlich kommt und was für ein Typ das ist.
Ich hoffe trotzdem das dir das etwas geholfen hat.
Allgemeine Empfehlung: http://tutorial.schornboeck.net
BR
evilissimo
-
hi evilissimo,
danke für die schnelle antwort. du hast es richtig verstanden.
will eine txt-datei nach einem bestimmten wort durchsuchen. das geht ja schon. falls das wort nicht gefunden wurde, will ich das wort "Hallo" nach z.B "oallH" verändern und dieses geänderte wort nochmals in der txt-datei suchen.
Und genau das geht nicht. nach der veränderung des wortes wird das wort nicht mehr gefunden auch wenn "oallH" in der txt-datei steht.gruß willi
-
nach dem suchen hast du die datei ausgelesen, und der stream ist am ENDE der datei
du musst also zurück zum anfang springen bevor du weiter suchen kannst
-
hi r0nny,
deine antwort kling logisch, habe deshalb vor der while schleife
datei.seekg(0, ios::beg);eingefügt, hat sich leider nichts geändert.
gruss willi
-
Möglicherweise weil Dein Suchwort nach der ersten Bearbeitung "oallo" ist?
-
hi LordJaxom,
ne ist es nicht. ich rotiere die buchstaben unter einnander einwenig und suche dann in der datei danach. alle kombinationen die erstellt werden, gebe ich am bildschirm aus und da seh ich das die wörter in der txt-datei vorhanden sind.
z.B. eingabe "shau" ...mischen... => "haus" und haus ist in der txt-datei vorhanden, wird aber als nicht da angezeigt.
Mir kommt es so vor, als macht er es wirklich nur nach dem ersten durchgang richtig...gruss willi
-
hi alle zusammen
habe nochmals den "code" oben geändert, vielleicht ist es jetzt verständlicher!
gruss willi
-
hi,
habs gelöst.
... ifstream datei; <= war anfalscher stelle datei.open(pfad, ios::in); <= war anfalscher stelle datei.seekg(0); <= hat gefehlt ...danke euch allen.
gruss willi
-
root@nas schrieb:
slaenge = sizeof(suchWort);die länge eines stl-strings bestimmt man mit suchWort.size(). sizeof(suchWort) ist die größe der string-struktur in bytes. das ist etwas völlig anderes!
root@nas schrieb:
int ii; for (ii=slaenge;ii>=1;ii=ii-1) { suchWort[ii]=suchWort[ii-1]; // Datei wieder schließen } suchWort[0]=suchWort[slaenge]; suchWort[slaenge]='\0'; cout<<suchWort<<endl;du versuchst suchWort zu "rotieren". in deinem code steckt allerdings der wurm drin. es sollte so aussehen
char c=suchWort[slaenge-1]; int ii; for (ii=slaenge-2;ii>=0;ii=ii-1) { suchWort[ii+1]=suchWort[ii]; } suchWort[0]=c; cout<<suchWort<<endl;das rotieren kannst du mit den string-methoden noch vereinfachen:
suchWort.insert(0,1,suchWort[slaenge-1]); suchWort.erase(slaenge,1);
-
hi Konfusius,
die länge eines stl-strings bestimmt man mit suchWort.size(). sizeof(suchWort) ist die größe der string-struktur in bytes. das ist etwas völlig anderes!
so viel ich weiß kann man mittels sizeof() feststellen, wie viel speicher die datentypen oder eigene variablen belegen und genau das will ich ja.
du versuchst suchWort zu "rotieren". in deinem code steckt allerdings der wurm drin. es sollte so aussehen
...funktioniert jedoch.
das rotieren kannst du mit den string-methoden noch vereinfachen:
super habe ich nicht gewußt probiere ich gleich mal. danke
gruss willi