C++
VeröffentlichtRevision 1

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

C++
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

Mitwirkende 1

Menschen, deren Änderungen in dieser Seite veröffentlicht wurden.

Kommentare 0

Kommentare sind für diese Seite deaktiviert.