cpp parsing

C++ Parsing: Informationen aus Strings extrahieren

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 unin­tuitiv. 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

C++ String

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:

c++ string

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

c++ string

So könnt ihr diese neue Möglichkeit dann zum Einlesen des Datums ver­wenden:

c++ string

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 Um­wandlung 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än­kt (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.


C++ lernen

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.

Kommentar verfassen