Texte mit std::string verarbeiten
std::string verwaltet eine Folge von char-Elementen und den benötigten Speicher. Eine Memberfunktion gehört zu einem Typ und wird über ein Objekt aufgerufen, beispielsweise name.size().
Texte mit std::string verarbeiten#
Werte und Ausdrücke · Lektion 17 von 60
Voraussetzungen: Variablen, getline. Lernziel: Du verbindest und untersuchst Texte innerhalb ihrer Grenzen.
std::string verwaltet eine Folge von char-Elementen und den benötigten Speicher. Eine Memberfunktion gehört zu einem Typ und wird über ein Objekt aufgerufen, beispielsweise name.size().
1#include <iostream>2#include <string>3 4int main() {5 std::string vorname{"Ada"};6 std::string name = vorname + " Lovelace";7 name += '!';8 std::cout << name << '\n';9 std::cout << "Codeeinheiten: " << name.size() << '\n';10 if (!name.empty()) {11 std::cout << "Erste Codeeinheit: " << name.at(0) << '\n';12 }13}+ verbindet Textteile. += hängt an. empty() prüft, ob der String leer ist. size() liefert die Elementanzahl. Eine Codeeinheit ist eine Speichereinheit der Textkodierung, hier ein char.
Positionen beginnen bei null#
Ein Index bezeichnet eine Position. Die erste ist 0, die letzte bei nichtleerem String size() - 1. at(index) prüft die Grenze und meldet ungültigen Zugriff mit einer Ausnahme. Eine Ausnahme ist ein besonderer Mechanismus zur Fehlermeldung, den du später kennenlernst.
operator[], etwa name[0], bietet nicht dieselbe Bereichsprüfung. Für tatsächliche Textelemente gilt index < name.size(). Die besondere Endmarkierung bei size() ist kein zusätzliches Textzeichen und darf nicht beliebig überschrieben werden.
Suchen und ausschneiden#
name.find("Love") sucht eine Zeichenfolge. Bei Misserfolg liefert die Funktion std::string::npos, einen besonderen Wert für „keine Position“. Prüfe darauf, bevor du das Ergebnis als Index verwendest. substr(start, anzahl) erzeugt einen Teilstring; der zweite Wert ist eine Länge, keine Endposition.
Mit == vergleichst du zwei Strings nach Inhalt. "Ada" und "ada" unterscheiden sich. Sprachgerechte Sortierung und Unicode-Normalisierung sind zusätzliche Aufgaben. Normalisierung kann verschiedene Zeichenfolgen, die dasselbe Schriftzeichen darstellen, in eine vereinbarte Form überführen.
Umlaute und Nullzeichen#
UTF-8 kann sichtbare Zeichen auf mehrere Bytes verteilen. size() zählt deshalb nicht zuverlässig sichtbare Buchstaben. Byteweises Abschneiden eines Umlauts kann ungültigen UTF-8-Text erzeugen.
Ein String kann Nullzeichen enthalten. Bei Konstruktion aus einem gewöhnlichen C-String endet die Übernahme aber am ersten \0, sofern keine ausdrückliche Länge übergeben wird. Ein C-String ist eine durch ein Nullzeichen abgeschlossene Zeichenfolge; dazu später mehr bei Zeigern.
Übung#
Was liefert std::string{"Hallo"}.substr(1, 3)?
Lösung
all. Position 1 ist das a, anschließend werden insgesamt drei Elemente übernommen.
Weiterlernen#
Zurück: Typumwandlungen und static_cast · Kursübersicht · Weiter: Entscheidungen mit if und else
Kommentare 0
Kommentare sind für diese Seite deaktiviert.