C ++ String -Ansicht

C ++ String -Ansicht
Indexzählung von Stringzeichen beginnt von Null (nicht eins). Ein String -Bereich ist eine kontinuierliche Abfolge von Zeichen aus einem String -Literal. Die ganze Saite ist eine große Reichweite. Kleinere Bereiche können aus einer Schnur erhalten werden. Die Idee einer String -Ansicht besteht darin, einen entschiedenen Bereich aus einer Zeichenfolge zu erhalten, so dass der Bereich wie eine unabhängige Zeichenfolge ist, deren eigenes Zeichen am Index Null liegt. Obwohl ein String-View-Objekt allein stehen kann, ist es offiziell eine Reichweite und kann nicht normalerweise geändert werden.

Die String View ist eine Klasse einer eigenen Bibliothek, die wie folgt in ein C ++ - Programm aufgenommen werden sollte:

#enthalten

Es verfügt über Mitgliedsfunktionen, die unter folgenden Überschriften eingeteilt wurden: Konstruktion, Kapazität, Elementzugriff, Iteratorunterstützung, Modifikatoren, String -Operationen und Suche. Seltsamerweise hat String_View Modifikatoren, die mit seiner Definition in Konflikt stehen. Das wird unten in diesem Tutorial geklärt. Der gesamte String -View -Code in diesem Tutorial befindet sich in der Funktion c ++ main ().

Artikelinhalt

  • Konstruktion
  • Kapazität
  • Elementzugriff
  • Iteratorunterstützung
  • Modifikatoren
  • Stringoperationen
  • Suche
  • Abschluss

Konstruktion
Basic_string_view (const chart* str)

Dadurch konstruiert ein String-View aus einem ganzen String-Literal von konstantem Zeigungs-zu-Charakter. Das Folgende veranschaulicht dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str);
Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei vier fünf

Beachten Sie, dass String_View anstelle von Basic_string_view für den Konstruktoramen verwendet wurde.

BASIC_STRING_VIEW (const Diagramm* str, size_type len)

Diese Mitgliedsfunktion Windows Die ersten Len -Zeichen des String -Arguments. Das Fenster kopiert nicht. Keine Kopien von String-View-Konstruktor-Kopien. Sie verweisen nur. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei

Basic_string_view (const Basic_string_view &)

Dieser Konstruktor ist der gleiche wie der erste Konstruktor oben, aber sein Argument ist ein String_view -Objekt, das bereits seine Ansicht hatte. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
string_view strvv (strv);
Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei

Basic_string_view & operator = (const Basic_string_view &)

Dieser Mitgliedskonstruktor ähnelt dem oben, aber die String_View wird zugewiesen und nicht als Argument übergeben. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
string_view strvv = strv;
Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei

Kapazität
size_type size () const

Denken Sie daran, eine String_View ist eine Bereichen von einer Originalzeichenfolge aus. Es ist keine Kopie des Bereichs. Es hat Verweise auf die Charakterelemente des Bereichs in der ursprünglichen Zeichenfolge. Die Größe dieser String_View (Fensteransicht) kann weiterhin bestimmt werden. Die Größe wird von der Member -Funktion der Größe () zurückgegeben. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
int sz = strv.Größe();
Cout <Rückkehr 0;

Die Ausgabe ist:

13

bool leer () const

Ein String_View -Objekt kann leer erstellt werden, wie im folgenden Programm gezeigt. Wenn die leere () Mitgliedsfunktion leer ist, wird wahr zurückgegeben. Andernfalls wird falsch zurückgegeben. Das Programm ist:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

string_view strv;
bool BL = strv.leer();
Cout <Rückkehr 0;

Die Ausgabe ist 1 für wahr. Beachten Sie, dass das Objekt String_view ohne Klammern und ohne Argument erstellt wurde.

Elementzugriff
const_referenzoperator [] (size_type pos) const

Der quadratische Halterungsoperator kann verwendet werden, um einen Wert (Zeichen) in der String_view zu lesen. Das folgende Programm verwendet eine For-Schleife, um dies zu veranschaulichen:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
für (int i = 0; i Cout <Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei

Hinweis: Ein Zeichen in einem String_View -Objekt kann nicht geändert werden. Eine mögliche Änderung sollte im ursprünglichen Zeichenfolge vorgenommen werden.

Iteratorunterstützung
const_iterator begin () const

Diese Mitgliedsfunktion gibt einen konstanten Iterator zurück, der auf das erste Zeichenelement des Objekts string_view zeigt. Hier bedeutet Const_iterator, dass das Zeichen nicht geändert werden kann. Der Iterator kann jedoch erhöht werden, um auf das nächste Zeichenelement zu verweisen. Oder fügen Sie eine Ganzzahl hinzu, die dem Hinzufügen einer Ganzzahl zu einem Index ähnelt, um auf ein anderes Zeichenelement zu verweisen. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
string_view :: const_iterator it = strv.Start();
es ++;
es = es + 4;
Cout <<*it <Rückkehr 0;

Die Ausgabe ist 'w'. Beachten Sie auf diese Weise, wie der Iterator konstruiert wurde.

const_iterator end () const

Diese Mitgliedsfunktion gibt einen konstanten Iterator zurück, der kurz nach dem letzten Zeichenelement des STRING_VIEW -Objekts zeigt. Der Iterator kann dekrementiert werden, um auf das letzte Charakterelement zu verweisen oder eine Ganzzahl zu subtrahieren, ähnlich, um eine Ganzzahl von einem Index zu subtrahieren. Hier bedeutet Const_iterator, dass das Zeichen nicht geändert werden kann. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
string_view :: const_iterator it = strv.Ende();
Es--;
es = es - 4;
Cout <<*it <Rückkehr 0;

Die Ausgabe ist 't'.

Modifikatoren
void remove_prefix (size_type n)

Dadurch wird ein erstes Unterstring aus der String_View entfernt, jedoch kein Zeichen aus der ursprünglichen Zeichenfolge entfernt. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
Cout <Strv.REME_PREFIX (4);
Cout <Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei
zwei drei
eins zwei drei vier fünf

void remove_suffix (size_type n)

Dadurch wird ein letzter Unterstring aus der String_View entfernt, aber kein Zeichen aus der ursprünglichen Zeichenfolge entfernt. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
Cout <Strv.REMED_SUFFIX (6);
Cout <Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei
eins zwei
eins zwei drei vier fünf

Stringoperationen
size_type copy (chart* s, size_type n, size_type pos = 0) const

Diese Funktion kopiert einen Zeichenbereich aus dem Objekt String_view (nicht der ursprünglichen Zeichenfolge), um die erste Unterstriche einer anderen Zeichenfolge zu ersetzen. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

char strb [] = "aaa bbb ccc ddd eee";
const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
Cout <Strv.Kopie (strb, 3, 4);
Cout <Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei
Zwei BBB CCC DDD EEEE
eins zwei drei vier fünf

Hier gibt es zwei unabhängige Saiten. Die String_View ist keine unabhängige Zeichenfolge. Es ist ein Bereichsfenster eines der unabhängigen Saiten. Beachten .

int compare (Basic_string_view s) const

Die Anzahl der Zeichen von zwei String_Views wird hier verglichen. Wenn die unter Verwendung der Mitgliedsfunktion Compare () höher ist, wird eine positive Zahl zurückgegeben. Wenn die Zahlen gleich sind, wird Null zurückgegeben. Wenn das STRING_VIEW -Objekt, das die Mitgliedsfunktion verwendet, eine niedrigere Zahl hat, wird eine negative Zahl zurückgegeben. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* stra = "Eins zwei drei vier fünf";
String_view strva (Straße, 13);
Cout <const char* strb = "aaa bbb ccc ddd eee";
string_view strvb (strb, 11);
Cout <int ret = strvb.vergleiche (strva);
Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei
AAA BBB CCC
-14, auf dem Computer des Autors.

Suche
size_type find (const chart* s, size_type pos = 0) const

Diese Mitgliedsfunktion sucht nach dem Auftreten des ersten Unterstrichs, s in der betreffenden String_View. Es gibt den Index des ersten Charakters der gefundenen Unterstufe zurück. Wenn nicht gefunden, gibt es -1 zurück. Das zweite Argument gibt an, wo die Suche beginnt (Standardindex ist 0). Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

const char* str = "Eins zwei drei vier fünf";
string_view strv (str, 13);
Cout <const char* cs = "zwei";
int ret = strv.find (cs, 0);
Cout <Rückkehr 0;

Die Ausgabe ist:

eins zwei drei
4

Abschluss

Eine String_View ist eine Fensteransicht eines Bereichs eines Originalzeichens. Es ist keine Kopie der Zeichen. Die Zeichen werden genannt. Es gibt eine String -Ansichtsklasse, aus der String_view -Objekte instanziiert sind. String-View hat viele Mitgliederfunktionen. Die grundlegenden Mitgliedsfunktionen aus den verschiedenen Kategorien wurden oben erläutert.