Frage zu strings
-
Hallo!
Ich habe folgendes Problem:
Ich muss in string nach bestimmte Teilstrings suchen.Falls gefunden, muss ich es ersetzen. Ich habe mir schon find() und replace() angeschaut. Das Problem:
nachdem Teilstring ersetzt wurde, möchte ich das es noch weitergesucht wird(nicht vom Anfang an). Wie kann ich es realisieren?Danke!
-
find liefert den index in der aufrufenden Zeichenkette zurück und den übergibst du beim nächsten aufruf an find so das die Suche nicht von vorne begonnen werden muss.
Bsp:
// ... string str = "Das ist ein Test, ja ein Test ist dies."; string fin = "Test", rep = "tseT"; int index = 0; do { index = str.find(fin, index); if(index != string::npos) str.replace(index, rep.size(), rep); }while(index != string::npos); // ...
Ich habe es zwar nicht getestet aber so müsste es funktionieren.
-
Also, index als zweites Argument übergeben?
-
Ja, die definition von find sieht folgendermaßen aus:
size_type find(const string &strob, size_type start = 0) const;
d. h. es wird bei "start" nach dem string "strob" begonnen zu suchen und als Ergebnis bekommst du den Index zurück wo "strob" gefunden wurde.
Wurde "strob" nicht gefunden bekommst du "string::npos" zurück.
-
Super, alles klare!
Danke!
-
Wolle.:
1. string.replace erwartet als zweites argument nicht die länge des strings, der hineinkopiert werden soll, sondern die des strings, der ersetzt werden soll.
2. index muss erhöht werden, da es sonst zu problemen kommt, wenn rep fin beinhaltet.void replace_all (string &s, const string &value, const string &replacement) { unsigned u = 0; while ((u=s.find(value, u)) != string::npos) { s.replace (u, value.size(), replacement); u+=replacement.size(); } }
-
Stimmt, habe ich nicht bedacht.
Schande über mich