Kai aus der Kiste Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 Hi, ich möchte in einem String nach bestimmten Wörtern suchen, ich dachte, es ginge so: if (l_completeString_s.find(l_searchstring_s) != -1) { cout<<l_completeString_s<<endl; return l_completeString_s; } aber das funzt net! :mad: Er findet die gesuchten Wörter nicht. Wer kann mir helfen??? Nachtrag: Ich arbeite mit std:strings (keine char*) <FONT COLOR="#a62a2a" SIZE="1">[ 19. Dezember 2001 10:43: Beitrag 1 mal editiert, zuletzt von Kai aus der Kiste ]</font> Zitieren
Klotzkopp Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 Enthält l_searchstring_s mehrere Suchwörter? <FONT COLOR="#a62a2a" SIZE="1">[ 19. Dezember 2001 11:31: Beitrag 2 mal editiert, zuletzt von Klotzkopp ]</font> Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 Falls du meinst, daß er auch Leerzeichen enthält: ja! Es funktioniert aber auch nicht, wenn ich nach einem String ohne Leerzeichen suche. Zur Erklärung, daß keine Mißverständnisse auftauchen: Ich möchte immer nach dem gesamten String in l_searchstring_s suchen, nicht etwa nach den einzelnen Wörtern, die darin vorkommen! Zitieren
Klotzkopp Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 Stimmt die Groß-/Kleinschreibung? Poste doch mal ein Beispiel für l_completeString_s und l_searchstring_s, das nicht gefunden wird. <FONT COLOR="#a62a2a" SIZE="1">[ 19. Dezember 2001 12:04: Beitrag 1 mal editiert, zuletzt von Klotzkopp ]</font> Zitieren
Poldi Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 dat funzt so: if ( (gesamtString.find("Suchstring",0)) != -1 ) { ... etc pp } du mußt in der klammer mit angeben, wo er anfangen soll zu suchen. übrigens wird case sensitive gesucht ... Zitieren
Klotzkopp Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Poldi: <STRONG>du mußt in der klammer mit angeben, wo er anfangen soll zu suchen.</STRONG> Nein, der zweite Parameter hat den Default-Wert 0. size_type find(const basic_string& str, size_type pos = 0) const; Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 @ Poldi: Das funzt net... Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 @klotzkopp: Im Gesant-String steht z.B.: "01-12-06 15:39:32.465 0 Connecting to DB" Ich suche nach: "Connecting to DB" <FONT COLOR="#a62a2a" SIZE="1">[ 19. Dezember 2001 12:46: Beitrag 1 mal editiert, zuletzt von Kai aus der Kiste ]</font> Zitieren
Klotzkopp Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 string s1( "01-12-06 15:39:32.465 0 Connecting to DB" ); string s2( "Connecting to DB" ); int i = s1.find( s2 );[/code] Da kommt bei mir 24 raus. Setzt doch mal einen Breakpoint auf die Zeile mit dem find, und prüf nach, ob in den Strings wirklich das drin steht, was drin stehen sollte. <FONT COLOR="#a62a2a" SIZE="1">[ 19. Dezember 2001 13:00: Beitrag 1 mal editiert, zuletzt von Klotzkopp ]</font> Zitieren
Poldi Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 rückgabewert der funktion ist die stelle, an der der sting gefunden wurde, das heißt, der gefundene string beginnt im gesamtstring an position 24. also hat er es doch gefunden. -1 gibt die funktion zurück, wenn nichts gefunden wurde ... sollte sie zumindest. Zitieren
Klotzkopp Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 Jau, schon klar. Ich wollte mit dem Code nur zeigen, dass in den Strings nicht das stehen kann, was Kai als Beispiel angeführt hat, weil sonst 24 und eben nicht -1 rauskommen würde. Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 Klotzkopps Beispiel (Strings hardcodiert als Parameter übergeben) funktioniert bei mir auch! Komisch! Bei der Befehlszeile: cout<<l_completeString_s.find(l_searchstring_s)<<endl; bekomme ich als Wert in der Konsole immer "4294967295" ausgegeben! :confused: Was soll das denn? speicher ich als int zwischen, also so: int i = l_completeString_s.find(l_searchstring_s); cout<<i<<endl; gibt er mir immer "-1" aus, egal, ob der Suchstring im Gesamtstring vorkommt , oder nicht... In beiden Fällen müsste doch der gleiche Wert rauskommen, oder??? :confused: :mad: Ich beiss gleich in die Tastatur!!! <FONT COLOR="#a62a2a" SIZE="1">[ 19. Dezember 2001 13:47: Beitrag 1 mal editiert, zuletzt von Kai aus der Kiste ]</font> Zitieren
Klotzkopp Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 cout interpretiert den Rückgabetyp von basic_string::find anscheinend als unsigned. 4294967295 ist FFFFFFFF, was -1 bei einem vorzeichenbehafteten Typ entspricht. Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 Hmmm, sowas hab' ich mir auch schon gedacht, leider hilft es mir nicht viel weiter! Das ganze läuft auf 'ner Unix-Kiste, dürfte aber eigentlich kein Prob sein, oder? Zitieren
Klotzkopp Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 Nein, eigentlich nicht. Gib doch einfach mal die Strings direkt vor dem Aufruf von find aus. Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 mach' ich schon die ganze Zeit, ist alles so wie es sein soll! Übergebe ich der Funktion den Suchstring hardcodiert, geht's, nehm ich eine Stringvariable, geht's nicht, das kann doch wohl nicht angehen... :mad: Zitieren
Poldi Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 eigentlich kann das nicht angehen. also, wenn ich die beiden strings (gesamt und suchstring) ganz einfach als string deklariere, tu es das bei mir ohne probleme. #include <iostream.h> #include <string> void main () { string s1("dies ist der suchstring"); string s2("ist der"); if ( s1.find(s2) != -1 ) { cout << "gefunden\n"; } } probier das mal aus bei dir. das muß definitiv funktionieren. wenn nicht, liegt der fehler bei deinem system irgendwo. Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 @poldi: Soweit waren wir schon Trotzdem danke! Habe den schuldigen soweit ausgemacht, daß es sich um den Suchstring handeln muß! Gebe ich da kurz vor der Abfrage den Inhalt noch mal hardcodiert ein, findet er's! Die Stringlänge zwiscehn vorher und nachher ist nämlich nicht gleich, es muß also irgendwie daran liegen, wie der Suchstring vorher gebildet wird, aber String ist doch gleich String, oder??? string* l_current_s = new string(text); l_completeString_s = *l_current_sl_completeString_s = "01-12-06 15:39:32.465 0 Connecting to DB"; cout<<"System: Stringlänge l_searchString_s:"<<l_searchstring_s.size()<<endl; cout<<"System: l_searchString_s: "<<l_searchstring_s<<endl; l_searchstring_s = "Connecting to DB"; cout<<"System: Stringlänge l_searchString_s:"<<l_searchstring_s.size()<<endl; cout<<"System: l_searchString_s: "<<l_searchstring_s<<endl; cout<<"System: l_completeString_s: "<<l_completeString_s<<endl; int i = l_completeString_s.find(l_searchstring_s,0); cout<<l_completeString_s.find(l_searchstring_s,0)<<endl; cout<<i<<endl; ergibt die Ausgabe: System: Stringlänge l_searchString_s:17 System: l_searchString_s: Connecting to DB System: Stringlänge l_searchString_s:16 System: l_searchString_s: Connecting to DB System: l_completeString_s: 01-12-06 15:39:32.465 0 Connecting to DB 24 24 <FONT COLOR="#a62a2a" SIZE="1">[ 19. Dezember 2001 14:58: Beitrag 1 mal editiert, zuletzt von Kai aus der Kiste ]</font> Zitieren
Klotzkopp Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 Vielleicht hängt noch ein Leerzeichen hinten dran? Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 Dachte ich mir auch schon, nur wüsste ich nicht woher... :confused: So bilde ich den Suchstring: l_searchString_s = l_completeString_s.substr(l_completeString_s.find("~",0)+1,l_completeString_s.size()); Dabei ist l_completeString_s = SFCS_Socket.log~Connecting to DB Ich habs schon so versucht: l_searchString_s = l_completeString_s.substr(l_completeString_s.find("~",0)+1,l_completeString_s.size-1()); ...mit dem gleichen Ergebnis, daß der Suchstring immer noch um eins zu lang ist! Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 Eventuell ein Zeichenkette-Endezeichen??? Zitieren
Klotzkopp Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 Die Parameter von basic_string::substr sind nicht Von,Bis sondern Von,Anzahl! Versuchs mal mit l_searchString_s = l_completeString_s.substr(l_completeString_s.find("~",0)+1,l_completeString_s.size() - l_completeString_s.find("~") -1 ); Falls das nicht hilft, setz mal die -1 am Ende auf -2. Kann ja sein, dass l_completeString_s schon ein nicht druckbares Zeichen am Ende hat. <FONT COLOR="#a62a2a" SIZE="1">[ 19. Dezember 2001 15:25: Beitrag 3 mal editiert, zuletzt von Klotzkopp ]</font> Zitieren
Kai aus der Kiste Geschrieben 19. Dezember 2001 Autor Geschrieben 19. Dezember 2001 Waaaah, es geeeht! Juchuuh! Mit "-2" am Ende funktioniert's!!! Vielen vielen Dank!!! *umdenrechnertanzundaufundabspring* Das war jetzt aber eine schwere Geburt! Vielen Dank an alle, die geholfen haben!!! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.