Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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>

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!

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

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

@ Poldi:

Das funzt net... :(

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

	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>

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.

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>

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?

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:

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.

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

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!

Eventuell ein Zeichenkette-Endezeichen???

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>

Waaaah, es geeeht! Juchuuh! Mit "-2" am Ende funktioniert's!!!

Vielen vielen Dank!!! :D:D:D

*umdenrechnertanzundaufundabspring*

Das war jetzt aber eine schwere Geburt! Vielen Dank an alle, die geholfen haben!!!

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.