Wenn es ums Programmieren geht, möchtest du das Rad im Allgemeinen nicht neu erfinden. Für viele Standardalgorithmen gibt es bestimmt schon jemanden, der deine Arbeit bereits erledigt hat.
Um den Inhalt anderer Dateien einzubinden, verwendet C++ die include-Direktive.
Diese Includes sollten oben in der Datei stehen.
Während der Kompilierung wird die Zeile mit der Direktive durch den Inhalt der jeweiligen Datei ersetzt.
Namespaces bleiben nach den Includes so erhalten, wie sie in der Originaldatei stehen.
Die Standardbibliothek bietet viele gängige Funktionen, Algorithmen und Datenstrukturen.
Die Standardbibliothek verwendet den Namespace std.
Ein Beispiel ist die C-Numerikbibliothek cmath.
Sie stellt viele gängige mathematische Operationen bereit.
#include <cmath>
int cube_me(int a) {
// raise `a` to the third power
return std::pow(a, 3);
}
Standardbibliotheken werden mit spitzen Klammern <> statt mit doppelten Anführungszeichen " eingebunden.
Der Unterschied liegt darin, wo der Compiler nach den jeweiligen Dateien sucht.
Bei der Version mit spitzen Klammern wird die Suche im aktuellen Projekt übersprungen, und sie beginnt direkt in den Include-Verzeichnissen des Systems.
Wenn du lokale Dateien einbinden möchtest, verwendest du doppelte Anführungszeichen: #include "myfile"
Ein string in C++ ist ein veränderbares Objekt, das Text als eine Folge von Zeichen (Buchstaben, Ziffern, Satzzeichen usw.) darstellt.
Strings werden manipuliert, indem man die Methoden des Strings aufruft.
In C++ müssen der String-Typ und die zugehörigen Funktionen vor der Verwendung aus der String-Bibliothek eingebunden werden.
Das machst du, indem du #include <string> oben in deine Datei einfügst.
Sie sind dann im Namespace std verfügbar.
Der vollqualifizierte Name des String-Typs ist std::string.
Das String-Literal verwendet das doppelte Anführungszeichen: ".
#include <string>
std::string w_berry_quote{"A well-made sentence, I think, is a thing of beauty."};
Du kannst den Operator + verwenden, um Strings zu verketten:
std::string original_title{"The School of Rock"};
std::string sequel_indicator{"Electric Boogaloo"};
std::string next_movie_title = original_title + " 2: " + sequel_indicator;
Um die String-Bibliothek zu nutzen, musst du wissen, dass man eine Funktion aufrufen kann, die zu einem Objekt gehört. Diese nennt man Memberfunktionen. Später im Lehrplan lernst du mehr über Memberfunktionen und das damit verbundene Klassenkonzept.
std::string qualification{"awesome"};
// 1st argument: from the index to the end of the string:
std::string who_is_awesome = qualification.substr(5);
// => "me"
// 2nd optional argument for the length:
std::string material{"haunted books"};
std::string ghost = material.substr(8, 3);
// => "boo"
Die Funktion find ist ebenfalls sehr nützlich.
Sie wird als Memberfunktion auf dem String aufgerufen und nimmt einen String als Argument.
find gibt die nullbasierte Position des ersten Vorkommens im String zurück.
std::string new_release{"apple released a new app!"};
new_release.find("app");
// => 0
new_release.find("e");
// => 4
In dieser Übung verarbeitest du Zeilen aus einem protokollierten Bericht.
Jede Logzeile ist ein String mit folgendem Format: "[<LEVEL>]: <MESSAGE>".
Es gibt drei verschiedene Log-Level:
INFOWARNINGERRORDu hast drei Aufgaben. Bei jeder bekommst du eine Logzeile und sollst etwas damit anstellen.
Implementiere die Methode log_line::message, um die Nachricht einer Logzeile zurückzugeben:
log_line::message("[ERROR]: Invalid operation")
// => "Invalid operation"
Implementiere die Methode log_line::log_level, um den Log-Level einer Logzeile zurückzugeben, und zwar in Großbuchstaben:
log_line::log_level("[ERROR]: Invalid operation")
// => "ERROR"
Implementiere die Methode log_line::reformat, die die Logzeile umformatiert: Sie stellt die Nachricht voran und hängt den Log-Level in Klammern dahinter:
log_line::reformat("[INFO]: Operation completed")
// => "Operation completed (INFO)"
Melde dich bei Exercism an, um C++ mit 19 Konzepte100 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.