In C++ wird der Datentyp string verwendet, um Zeichenketten zu speichern und zu verarbeiten. Anders als der C-String (ein Array von char-Elementen mit Null-Terminierung) ist der string-Typ eine komfortable Klasse aus der Standardbibliothek (<string>), die viele nützliche Funktionen zur Bearbeitung von Zeichenketten bietet.
Ein string kann folgendermaßen deklariert und initialisiert werden:
#include <iostream> #include <string> // Notwendig für string using namespace std; int main() { string text = "Hallo, Welt!"; cout << text << endl; return 0; }
string text = „Das ist ein Text“;getline(cin, text): Eingabe eines Textes inkl. Leerzeichentext.length() oder size(): Gibt die Anzahl der Zeichen zurück.text.append(string): Fügt eine Zeichenkette an.text.insert(pos, string): Fügt eine Zeichenkette an einer bestimmten Position ein.text.erase(pos, len): Entfernt len Zeichen aus der Zeichenkette an der Position pos.text.substr(pos, len): Gibt einen Teil der Zeichenkette zurück.text.find(string): Sucht nach einem Teilstring und gibt die Position zurück.text[i] liefert das Zeichen an der i. Stelle
Die range-basierte for-Schleife ist eine moderne und vereinfachte Form der Schleife in C++, mit der man alle Elemente einer Sammlung (z. B. string, vector, Array) bequem durchlaufen kann – ganz ohne Zählvariable.
for (Datentyp variable : sammlung) { // Anweisungen }
Datentyp ist der Typ eines einzelnen Elements (z. B. char, int oder auto)variable ist der Platzhalter für das aktuelle Elementsammlung ist z. B. ein std::string, std::vector, Array usw.#include <iostream> #include <string> using namespace std; int main() { string text = "Hallo"; for (char c : text) { cout << c << endl; } return 0; }
Ausgabe:
H a l l o
i++, i < size() usw.)Wenn man die Elemente verändern möchte, muss man mit Referenz arbeiten:
vector<int> zahlen = {1, 2, 3}; for (int& z : zahlen) { z = z * 2; }
Ohne das & (Referenz) wird nur eine Kopie des Wertes verändert – nicht das Original.
Die range-basierte for-Schleife ist ideal, wenn man alle Elemente einer Sammlung durchlaufen, aber keinen Index braucht. Sie ist übersichtlich, kompakt und sicher.
text.push_back(char): Fügt ein einzelnes Zeichen am Ende der Zeichenkette an.text.push_back('a'); fügt das Zeichen 'a' am Ende der Zeichenkette hinzu.text.pop_back(): Entfernt das letzte Zeichen aus der Zeichenkette.text.pop_back(); entfernt das letzte Zeichen der Zeichenkette.text.empty(): Gibt zurück, ob die Zeichenkette leer ist (true, wenn sie leer ist, sonst false).if (text.empty()) { cout « „Die Zeichenkette ist leer.“; }text.replace(pos, len, string): Ersetzt einen Teil der Zeichenkette von Position pos mit einer neuen Zeichenkette.text.replace(3, 4, „neuerText“); ersetzt 4 Zeichen ab der Position 3 durch „neuerText“.text.erase(pos): Entfernt alle Zeichen ab der Position pos bis zum Ende der Zeichenkette.text.erase(5); entfernt alle Zeichen ab der Position 5 bis zum Ende der Zeichenkette.text.find_first_of(string): Sucht nach dem ersten Vorkommen eines beliebigen Zeichens aus einer gegebenen Zeichenkette und gibt dessen Position zurück.size_t pos = text.find_first_of(„aeiou“); sucht nach dem ersten Vokal in der Zeichenkette und gibt dessen Position zurück.text.find_last_of(string): Sucht nach dem letzten Vorkommen eines beliebigen Zeichens aus einer gegebenen Zeichenkette und gibt dessen Position zurück.size_t pos = text.find_last_of(„aeiou“); sucht nach dem letzten Vokal in der Zeichenkette und gibt dessen Position zurück.text.find_first_not_of(string): Sucht nach dem ersten Zeichen, das nicht in der angegebenen Zeichenkette vorkommt.size_t pos = text.find_first_not_of(„aeiou“); sucht nach dem ersten Zeichen, das kein Vokal ist.text.find_last_not_of(string): Sucht nach dem letzten Zeichen, das nicht in der angegebenen Zeichenkette vorkommt.size_t pos = text.find_last_not_of(„aeiou“); sucht nach dem letzten Zeichen, das kein Vokal ist.text.substr(pos): Gibt einen Teilstring ab der Position pos bis zum Ende der Zeichenkette zurück.string part = text.substr(5); gibt den Teilstring von der Position 5 bis zum Ende der Zeichenkette zurück.text.substr(pos, len): Gibt einen Teilstring von der Position pos mit einer Länge von len zurück.string part = text.substr(3, 4); gibt die 4 Zeichen ab der Position 3 zurück.text.c_str(): Gibt die Zeichenkette als C-String (nullterminiert) zurück.const char* c_str = text.c_str(); gibt den C-String zurück, der die Zeichenkette repräsentiert.text.swap(string): Tauscht den Inhalt von zwei Zeichenketten.text1.swap(text2); tauscht den Inhalt von text1 und text2.text.resize(size): Ändert die Größe der Zeichenkette. Wenn die neue Größe kleiner ist, werden Zeichen abgeschnitten. Wenn sie größer ist, wird die Zeichenkette mit Nullzeichen (oder einem angegebenen Zeichen) aufgefüllt.text.resize(10, 'x'); sorgt dafür, dass die Zeichenkette 10 Zeichen lang ist und mit 'x' aufgefüllt wird.text.find(string, pos): Sucht nach einer Teilzeichenkette ab der Position pos und gibt die Position des ersten Vorkommens zurück. Wenn nichts gefunden wird, wird string::npos zurückgegeben.size_t pos = text.find(„abc“, 0); sucht nach dem ersten Vorkommen von „abc“ ab der Position 0.text.compare(string): Vergleicht zwei Zeichenketten lexikografisch. Gibt einen Wert kleiner als 0 zurück, wenn die erste Zeichenkette kleiner ist, einen Wert größer als 0, wenn sie größer ist, und 0, wenn sie gleich sind.int result = text.compare(„example“); vergleicht text mit „example“ und gibt den Vergleichswert zurück.1. Einfache Zeichenkettenverarbeitung
#include <iostream> #include <string> using namespace std; int main() { string name; cout << "Geben Sie Ihren Namen ein: "; cin >> name; cout << "Hallo, " << name << "!" << endl; return 0; }
Hinweis: cin liest nur bis zum ersten Leerzeichen. Um eine ganze Zeile einzulesen, nutzt man getline().
string text; cout << "Gib einen Text ein: "; getline(cin, text); // Liest die gesamte Zeile ein cout << text;
2. Zeichenkette bearbeiten
include <iostream> #include <string> using namespace std; int main() { string s = "C++ ist toll!"; s.insert(8, "wirklich "); cout << s << endl; return 0; }
Ausgabe: C++ ist wirklich toll!
3. Zeichenkettenvergleich
#include <iostream> #include <string> using namespace std; int main() { string passwort = "geheim"; string eingabe; cout << "Passwort eingeben: "; cin >> eingabe; if (eingabe == passwort) { cout << "Zugang gewährt!" << endl; } else { cout << "Falsches Passwort!" << endl; } return 0; }
4. Ausgabe von einzelnen Zeichen
string text; cout << "Gib einen Text ein: "; cin >> text; // Nur ein Wort einlesen cout << "Einzelne Zeichen der Eingabe:\n"; for (int i = 0; i < text.length(); i++) { cout << "text[" << i << "] = " << text[i] << endl; } return 0;
Schreibe ein Programm, das eine Zeichenkette vom Benutzer einliest und ausgibt.
Schreibe ein Programm, das eine Zeichenkette einliest und deren Länge ausgibt.
Schreibe ein Programm, das eine Zeichenkette einliest und das Zeichen an einer bestimmten Position ausgibt.
Schreibe ein Programm, das eine Zeichenkette einliest und sie rückwärts ausgibt.
Schreibe ein Programm, das eine Zeichenkette einliest und zählt, wie oft ein bestimmtes Zeichen vorkommt.
Schreibe ein Programm, das eine Zeichenkette einliest und alle Buchstaben in Großbuchstaben umwandelt.
Schreibe ein Programm, das eine Zeichenkette einliest und alle Buchstaben in Kleinbuchstaben umwandelt.
Schreibe ein Programm, das prüft, ob eine eingegebene Zeichenkette ein Palindrom ist (vorwärts und rückwärts gleich).
Schreibe ein Programm, das eine Zeichenkette einliest und alle Leerzeichen entfernt.
Schreibe ein Programm, das prüft, ob eine Zeichenkette in einer anderen Zeichenkette vorkommt.
Schreibe ein Programm, das die Anzahl der Wörter in einer eingegebenen Zeichenkette zählt.
Schreibe ein Programm, das das erste und das letzte Wort einer eingegebenen Zeichenkette ausgibt.
Schreibe ein Programm, das in einer Zeichenkette alle Vorkommen eines bestimmten Zeichens durch ein anderes ersetzt.
Schreibe ein Programm, das überprüft, ob zwei eingegebene Zeichenketten Anagramme sind (gleiche Buchstaben in anderer Reihenfolge).
Schreibe ein Programm, das das häufigste Zeichen in einer Zeichenkette ermittelt und ausgibt.