Problem: String durchsuchen
-
Hallo,
ich hab da mal eine Frage zum Suchen eines Strings:
Mit der Funktion find(key) kann ich ja nach einem bestimmten Schlüssel suchen.
Nun habe ich aber das Problem, dass ich z.B. die Schlüssel "ABCD" und "CD" suche. Da das CD in ABCD ja auch vorkommt, springt meine Funktion, wenn ich find("CD") habe, immer zu "ABCD" anstatt zu "CD".
Gibt es dafür irgendeine Lösung?
Vielen Dank
MfG
LadyM
-
Pack doch vor und hinter den Zielstring ein Leerzeichen und suche nach Leerzeichen + Suchstring + Leerzeichen.
-
string f("ABCD"); int n = f.find("CD"); if (n != string::npos) { if (f.substr(n - 2, n + 1) == "ABCD") { // ABCD } else { // CD } }Hab grad keinen Compiler auf Arbyte zur Hand, sollte aber halbwegs hinhauen

rya.
-
Erstmal danke für Eure Antworten!
Das mit Leerzeichen vorne und hinten ist wohl die einfachste Möglichkeit, funktioniert aber in dem Fall so leider nicht.
Die andere Möglichkeit mit dem substr kann ich so auch nicht verwenden, da die Schlüssel immer unterschiedlich sind...
Nochmal genauer:
Ich habe eine Funktion, die Zeilen in eine Datei schreibt.
Dabei wird zunächst mit der find-Funktion geschaut, ob der key bereits vorhanden ist. Wenn ja, wird die Zeile ersetzt, wenn nein, wird die Zeile einfach am Ende eingefügt.Ist es irgendwie möglich, dass die find-Funktion immer genau an der 1. Stelle der Zeile anfängt zu suchen?
-
find gibt dir ja die Position im String zurück. Wenn diese != 0 ist, dann ist es entweder nicht vorhanden oder steht zumindest nicht am Anfang.
-
LadyM schrieb:
Ist es irgendwie möglich, dass die find-Funktion immer genau an der 1. Stelle der Zeile anfängt zu suchen?
Das tut sie doch.
Was willst du denn jetzt genau? Willst du ein exaktes Matching, d.h. find() findet bei "ABCD" und "CD" als Suchstring nichts, oder willst du einen Substring finden, d.h. find() soll bei "ABCD" und "CD" einen Zeiger auf das dritte Zeichen in "ABCD" liefern?Also std::string::find sucht nach Substrings. Ein exaktes Matching könntest du leicht als regulären Ausdruck durchführen, oder schnell eine Funktion dafür schreiben.
-
Wenn Du die ganze Datei durchsuchst, schau ob sie mit dem Key anfängt. Wenn nicht, schau ob "\nKey" vorhanden ist. Wenn nicht, ist der Key nicht vorhanden.
Wenn die Datei zeilenweise vorliegt, schau für jede Zeile, ob sie mit dem Key anfängt (mit substr, ohne find).
-
Nochmals Danke!
Ich möchte ein exaktes Matching, so dass "CD" wirklich nur bei "CD" und nicht bei "ABCD" gefunden wird.
Aber mit substr scheint es jetzt zu funktionieren...
-
ohne Hilfszeichen wie Anfang der Zeile, Leerzeichen, Komma, Tab oder Semikolon wird es nicht gehen. denn suche CD in CDAB, ABCD, CDBACD, CDGEHTAUCHNICHTCD usw. Wird es nie eindeutig sein. Und am einfachsten oder besser am elegantesten geht es mit Regular Expression.