Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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>

Geschrieben

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!

Geschrieben

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>

Geschrieben

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 ...

Geschrieben

<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;

Geschrieben

	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>

Geschrieben

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.

Geschrieben

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>

Geschrieben

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.

Geschrieben

@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>

Geschrieben

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!

Geschrieben

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>

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...