Eine Zeichenkette kann in C++ durchsucht werden, um zu sehen, ob sie bestimmte Unterglieder (substrings) enthält. Dazu stellt die Funktion find() aus der <string> Bibliothek komfortable Werkzeuge zur Verfügung. Beim Aufruf kann die Klammer als erstes Argument den gesuchten Substring enthalten. Das zweite Argument ist eine Zahl die den Startpunkt der Suche festlegt.
Ist eine Suche nach einem Substring erfolgreich, gibt die find() Funktion die erste Position zurück, an dem der Substring gefunden wurde. War die Suche erfolglos wird der Wert -1 zurückgegeben.
In der <string> Bibliothek gibt es noch zahlreiche andere Funktionen die Substrings lokalisieren können. Das sind zum Beispiel die folgenden Funktion:
find_first_of()
Anstatt nach dem ersten Vorkommen eines vollständigen Substrings zu suchen, schaut find_first_of() nach dem ersten angegebenen Zeichen das in einem String vorkommt. Der Start- und Endpunkt der Suche kann als Argument in den Klammern übergeben werden. Wird das Zeichen nicht gefunden, wird eine 1 zurückgegeben.
find_first_not_of()
Dem entsprechend findet find_first_not_of() das erste Zeichen eines Substrings, das nicht mit dem angegebenen Zeichen übereinstimmt. Die Positionen des Start- und Endpunkts der Suche kann als Argument in der Klammer übergeben werden.
Die Funktionen
find_last_of()
findet in einer Zeichenkette die letzte Position eines angegebenen Zeichens.
find_last_not_of()
findet in einer Zeichenkette die letzte Position eines Zeichens, das nicht dem angegebenen Zeichen übereinstimmt.
Im Grunde liefern alle Funktionen vergleichbare Ergebnisse, die letzten beiden beginnen aber mit der Suche am Ende des Strings und bewegen sich in Richtung String-Anfang. Das folgende kleine Programm demonstriert die Zusammenhänge auf praktische Weise.
Übung: Substrings finden
Programm: finden.cpp
#include <string> #include <iostream> using namespace std; int main() { string text = "Ich kann allem widerstehen, ausser einer Versuchung" ; int num; //Substring finden ab Position 0 num = text.find ("widerstehen", 0); cout << "Erste Position von widerstehen: " << num << endl; //Suche nach einem nicht existierenden Substring num = text.find ("Unsinn", 0); cout << "Ergebnis der Suche: " << num << endl; //Ausgabe der Anfangsposition eines Substrings num = text.find_first_of ("kann", 0); cout << "Erstes Vorkommen von k: " << num << endl; //Suche nach einem Substring, in dem "k" zuerst vorkommt num = text.find_first_not_of ("kann"); cout << "Erstes Vorkommen von nicht k: " << num << endl; //Suche nach dem letzten Vorkommen von "s" num = text.find_last_of ("s"); cout << "Letztes Vorkommen von s: " << num << endl; //Suche nach der Position des letzten Zeichens nach "s" num = text.find_last_not_of ("s"); cout << "Position des letzten Zeichens das kein s ist: " << num << endl; system("pause"); return 0; }
Speichern Sie das Programm und schauen Sie sich nach dem Kompilieren das Ergebnis an.
Dieser Artikel ist Teil unseres kostenlosen Workshops “C++ Programmieren lernen” – Geeignet für Einsteiger und Fortgeschrittene. Machen auch Sie mit und lernen Sie in 50 Artikeln, wie Sie Programme selbst schreiben!
Artikelbild: Fotolia / bramgino