kennen:include:string_view
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | kennen:include:string_view [2021-04-30 08:40] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== < | ||
+ | ===== Ein Wrapper für einen Zeichenbereich ===== | ||
+ | Die '' | ||
+ | eines [[string|std:: | ||
+ | einer C-Zeichenkette oder eines nicht-nullterminierten Feldes von Zeichen. | ||
+ | Der Warpper ist nur so lange gültig, wie die referenzierte Zeichenfolge existiert. | ||
+ | Sie bietet vorrangig Methoden zum | ||
+ | [[#Suchen]] und [[# | ||
+ | |||
+ | |||
+ | ==== Suchen ==== | ||
+ | Suchmethoden suchen ab '' | ||
+ | einen Teilstring, eine C-Zeichenkette oder ein Zeichen | ||
+ | |||
+ | | von vorn | von hinten| | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | || | ||
+ | | die erste Übereinstimmung | die letzte Übereinstimmung| | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | | | | ||
+ | | die erste Nichtübereinstimmung | die letzte Nichtübereinstimmung| | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | Sie liefern den Anfangsindex der gefundenen Kette bzw. des Zeichens, | ||
+ | auf das die geforderte Bedingung zutrifft. | ||
+ | Bei fehlgeschlagener Suche wird die Konstante '' | ||
+ | |||
+ | Ob eine Teilzeichenkette enthalten ist, erkannt man ab C++23 einfacher mit '' | ||
+ | |||
+ | ==== Vergleichen ==== | ||
+ | Vergleiche mit den Operatoren '' | ||
+ | |||
+ | <code cpp> | ||
+ | std:: | ||
+ | char* ptr = " | ||
+ | |||
+ | if (name == sv || name == ptr) | ||
+ | { | ||
+ | std::cout << "Die spinnen, die Roemer!\n"; | ||
+ | } | ||
+ | </ | ||
+ | Die '' | ||
+ | bzw. ab '' | ||
+ | |||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | Sie liefern | ||
+ | * einen negativen Wert, wenn '' | ||
+ | * einen positiven Wert, wenn '' | ||
+ | * 0 bei Übereinstimmung. | ||
+ | |||
+ | ==== Zeichenzugriff ==== | ||
+ | Der Zugriff auf einzelne Zeichen erfolgt mit | ||
+ | '' | ||
+ | Wenn '' | ||
+ | '' | ||
+ | Die '' | ||
+ | aufgefasst und mit lesenden [[..: | ||
+ | [[..: | ||
+ | liefern die Methoden | ||
+ | |||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ==== Größe ==== | ||
+ | |||
+ | Größe und Kapazität sind erfragbar und änderbar. | ||
+ | |||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ==== Einkürzen ==== | ||
+ | Der Zeichenbereich lässt sich an beiden Enden einkürzen, jedoch nicht erweitern: | ||
+ | |||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ==== Literale ==== | ||
+ | Zeichenkettenliterale lassen sich durch Anhängen von '' | ||
+ | |||
+ | <code cpp string_view.cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | void f(std:: | ||
+ | { | ||
+ | for (auto c : sv) std::cout << c; | ||
+ | } | ||
+ | |||
+ | auto trim(std:: | ||
+ | { | ||
+ | sv.remove_prefix(std:: | ||
+ | auto pos = sv.find_last_not_of(delimiters); | ||
+ | if (pos != sv.npos) sv.remove_suffix(sv.size() - (pos + 1)); | ||
+ | return sv; | ||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | using namespace std:: | ||
+ | |||
+ | const char arr[] = " | ||
+ | auto s = " | ||
+ | auto sv = "This is a string_view: | ||
+ | |||
+ | f(sv); | ||
+ | f(arr); | ||
+ | f({", ignored", | ||
+ | f(s); | ||
+ | std::cout << trim(" | ||
+ | } | ||
+ | </ |