In String
-
Gibt's bei C++ einen Befehl mit dem ich herausfinden kann ob in einem String eine beliebe Zahl steckt? Oder zum Beispiel ein Unterstrich?
Allgemein, gibt es einen Befehl um herauszufinden ob eine bestimmte Zeichenkette in einem String steckt?
-
string::find
-
ja gibts

// c++-string std::string s = "1q2343243542"; std::cout << s.find("343") << std::endl; // Ausgabe der position des ersten auftretens der zeichenikette "343" in s. // wenn s.find(...) == s.npos, dann ist die zeichenikette nicht enthalten. s.find("343", pos) sucht nach der zeichenkette, fängt aber erst ab dem pos. Zeichen in s damit an. // c-string mittels strstr(...)
-
Weedjo versucht mit seinem beschränkten C++ Kenntnissen zu helfen:
Man könnte mit :
Zahl = static_cast<int> (String123.find ("5", 0) ); nach der Zahl 0 Suchen bzw: Unterstrich = static_cast<int> (String123.find ("_", 0) );Hoffe mal das geht so, bin mir halt nich sicher xD
Denke man kann auch statt der "5" ne Variable einfügen, dann wird halt der wert der variable gesucht.edit: too late

Edit2: Wenn du dann ne Abfrage machen willst, ob was gefunden wurde:
if (Zahl != string::npos) { ...Denn wenn nichts gefunden wurde wird der wert "npos" übergeben
-
Und wenn ich nur wissen will ob überhaupt eine Ziffer drin steckt? Muss ich dann nach 0123456789 suchen? Oder gibts da was?
-
Denke mal du musst alle Zahlen nehmen und die mit nem "Oder"-Operator verknüpfen, kenn keinen anderen weg
also
1 || 2 || 3... || 9 || 0Edit : Habs grad ausprobiert, geht leider nicht

muss man so machen:Pos = static_cast<int> (string1.find_first_of ("123456789_", 0) );
-
find_first_of
-
Was bedeutet static_cast<int>?
-
Das ist ein cast, der hier dazu benutzt wird, nach int zu casten. Aber dieser cast ist völlig unnötig. Lass den weg.
Siehe auch hier: http://tutorial.schornboeck.net/casts.htm
-
Kann ich auch zwei Sachen verbinden?
Ich suche nach "Life" und i, wobei i ein Integer mit irgendeinem Wert ist, d.h. mein String soll z. B. "Life4" sein?
Ich will nicht einfach nach "Life4" suchen, das wäre zu umständlich.
-
Bei komplizierteren Suchen, solltest Du in Erwägung ziehen eine Bibliothek für den Umgang mit regulären Ausdrücken, wie zum Beispiel boost::regex, zu benutzen. Um das Konzept besser zu verstehen, kann es aber nicht schaden für solch einfache Dinge mal selbst einen kleinen endlichen Automaten zu schreiben.
-
So kompliziert wird meine Suche nicht. Ich denke es wäre zu aufwendig eine Bibliothek zu benutzen.
Gibt's noch andere Möglichkeiten?
-
Ignoriert den Post ich war verwirrt. ^^
-
mal was Einfaches

#include <iostream> bool find_char(char const * SuchSring, char const * SuchText) { if(SuchString == NULL || SuchText == NULL) return false; char * c = SuchString; while(c++) if(c == SuchText) return true; return false; }Verwendung:
int main() { if(find_char("Bla Bla 1", "1")) cout << "jep" << endl; if(find_char("Bla _ Bla...", "_")) cout << "jep" << endl; return 0; }
-
So einfach wie du es gern haettest, wird es nicht gehen ...
entweder du baust dir selber nen algo ...
bspw. nach "Life" suchen und die nachfolgenden zeichen manuell untersuchen
oder du verwendest Regular expressions ... und das natuerlich mit ner lib, selber implementiweren wirst das nich wollen ^^
Ciao ..
-
wer lesen kann, ist klar im Vortail

Hier noch 'n Versuch:
#include <iostream> bool find_char(char const * SuchSring, int Zahl) { if(SuchString == NULL) return false; // String ist Leer char i[2]; itoa(Zahl, i, 10); char * c = SuchString; while(c++) if(c == i) return true; return false; } int main() { int i = 4; if(find_char("Life4", i)) << cout "jep" << endl; return 0; }
-
if(c == i) return true;
@WinieX, diese Abfrage wird immer falsch sein, da du dort zwei verschiedene char* miteinander vergleichst, d.h. die Addressen und nicht die Stringinhalte...
-
Kann man auch überprüfen, ob ein Char eine bestimmte Zeichenkette enthält?
-
becks21 schrieb:
Kann man auch überprüfen, ob ein Char eine bestimmte Zeichenkette enthält?
ja, aber man nimmt einfach std::string
-
Ein char kann keine Zeichenkette enthalten, dazu reicht der Platz nicht aus

Wenn es dir um char*'s geht (aka C-Strings), die kannst du über strcmp() (vergleiche zwei Zeichenketten), strstr() (suche Teilstrings) etc miteinander verrechnen. Aber einfacher ist es imho, stattdessen std::string zu verwenden.
(im Magazin gibt es auch einen Artikel darüber, was Strings alles können)
-
Th schrieb:
if(c == i) return true;
@WinieX, diese Abfrage wird immer falsch sein, da du dort zwei verschiedene char* miteinander vergleichst, d.h. die Addressen und nicht die Stringinhalte...
ich gebs zu, hab den Code getippt ohne genauer zu gucken
Sollte auch nur als Bsp. dienen...