Die Aufteilung und Verarbeitungen von Strings heißen im Englischen Parsing. Im folgenden Beispiel erkläre ich, wie es in C++ funktioniert.
In unserem Beispiel (ein Buchungsprogramm) ist das Datumsformat aus technischen Gründen so gewählt, dass die Datumssuche funktioniert. Das Format JahrMonatTag YYYYMMDD ist aber für den Nutzer sehr unintuitiv. Daher schreiben wir nun eine Funktion, die einen String im Format DD.MM.YYYY, also beispielsweise 17.04.2023, entgegennimmt und in einen Integer im internen Format umwandelt (in diesem Beispiel: 20230417).
Zum Auftrennen eines Strings benötigt ihr die split()-Funktion (aus dem vorigen Abschnitt), allerdings mit einer Erweiterung, nämlich der Möglichkeit, das Trennzeichen selbst festlegen zu können:
Parsing.cpp

An die Stellen des Kommas wandert nun der Parameter delimiter (englisch für »Trennzeichen«). Hier wird ein neues Feature von C++ benutzt, nämlich die Möglichkeit der Standardparameter: Wie ihr in der zweiten Zeile sehen könnt, wurde mit einem Gleichheitszeichen das ursprüngliche Komma als Standardtrennzeichen festgelegt.
Wenn ihr nun diese Methode ohne Angabe des Parameters aufruft, wird das Komma verwendet:

Wenn ihr ein anderes Zeichen angebt, wird dieses zum Trennen verwendet:

So könnt ihr diese neue Möglichkeit dann zum Einlesen des Datums verwenden:

std::stoi() steht hier für »String to Integer« und wandelt eine Zeichenkette in eine Zahl um. Wenn diese Umwandlung fehlschlägt – beispielsweise bei std::stoi(“Zahl”) oder bei std::stoi(“Fünf”), denn nur reine Zahlen wie »123« sind möglich –, gibt es aktuell leider noch keine Möglichkeit, das abzufangen, und das Programm wird mit einem Fehler abstürzen.
Analog gibt es übrigens auch std::stod() und std::stof() für die Umwandlung in Kommazahlen (double bzw. float).
Ihr könnt die Funktion gerne noch um weitere Prüfungen erweitern, zum Beispiel darum, dass der Monat nur eine Zahl von 1 bis 12 sein darf, das Jahr größer null und der Tag nur eine Zahl zwischen 1 bis 31. Noch einen Schritt weiter könnt ihr gehen, indem ihr den Tag abhängig vom Monat einschränkt (bspw.: Hat der Februar maximal 29 Tage).
Die Lösungen dazu findet ihr im Code zum Buch unter https://cpp.hasper.info/code_im_buch, das Projekt heißt ParsingChecks.cpp.

Dieser Artikel ist ein Auszug aus dem Buch „C++ Schnelleinstieg“ von Philipp Hasper. Alle Infos zum Buch, das Inhaltsverzeichnis und eine kostenlose Leseprobe findet ihr bei uns im Shop.