So verwenden Sie C ++ String buchstäblich

So verwenden Sie C ++ String buchstäblich
Auf der Computertastatur sind Zeichen aufgedruckt. Wenn Sie eine Taste drücken, sehen Sie den Charakter auf dem Bildschirm. Hinweis: Platz ist auch ein Charakter. Ein String -Literal ist eine Abfolge von Zeichen. In diesem Artikel wird erläutert, wie C ++ String -Literale verwendet werden. Sie sollten über C ++ - Arrays und Zeiger wissen, um diesen Artikel zu verstehen.

Charakter wörtlich

Ein Charakterliteral ist ein Zeichen in einzelnen Zitaten. So,

char ident1 = 'a'; char ident2 = 'b'; char ident3 = '4'; char ident4 = '6';

sind alle unterschiedliche Definitionen von Zeichen. Beachten Sie, dass eine Ziffer in einzelnen Zitaten ein Zeichen ist und keine Ganzzahl.

Eine Escape -Sequenz wie \ ”(siehe unten) in einzelnen Zitaten ist ein Zeichen. So,

char ident1 = '"';

ist ein Charakter.

Ein einzelnes Symbol in Doppelquoten ist kein Zeichen; Es ist eine Zeichenfolge eines Zeichens. Also ist „a“ oder „c“ oder „2“ kein Zeichen, sondern eine Zeichenfolge eines Zeichens jeweils.

Die Variable eines SHAR kann später im Programm untergebracht werden, wie folgt:

char ident = 'x';
ident = 'y';

Um ein Zeichen zu verhindern, dass ein Kenner geändert wird, wird später im Programm die Definition mit dem reservierten Wort konstet, wie folgt:

const char ident = 'd';

Die Variable und die Identität sollen nur schreibgeschützt sein.

Saitenliteral

Ein String -Literal ist eine Abfolge von Zeichen in Doppelzitaten. So,

char ident1 [] = "Ich liebe dich"; char ident2 [] = "Ich hasse 3 von euch"; char ident3 []
= "Wir sind die Welt"; char ident4 [] = "Hallo Welt!";

sind alle unterschiedlichen Definitionen von String -Literalen. Beachten Sie die Verwendung von Doppelquoten. Es gibt nichts Schöneres als eine gewöhnliche Variable für eine Zeichenfolge. Ein String -Literal ist ein Array von Zeichen, bei dem die Sequenz mit "" abgrenzt, anstatt sich mit abzugrenzen. ". Die Chars sind nicht durch Kommas getrennt. Eine beliebige Anzahl größerer als die Anzahl der Zeichen im Saitenliteral kann in die quadratischen Klammern platziert werden. Es ist jedoch besser, die quadratischen Klammern leer zu lassen.

Ein einzelnes Zeichen in Doppelquoten ist kein Charakter; Es ist eine Zeichenfolge eines Zeichens. Also ist „a“ oder „c“ oder „2“ kein Zeichen, sondern eine Zeichenfolge eines Zeichens jeweils.

Eine String -Variable ermöglicht keine Neuzuordnung des gesamten wörtlichen Literales, später im Programm - siehe unten. Einzelne Zeichen können jedoch neu zugewiesen werden - siehe unten.

Einzel- und Doppelzitat in Charakter oder wörtlich

Um ein einzelnes Zitat als Charakter zu haben, tun Sie so etwas wie,

char ident = '\' ';

Um ein doppeltes Zitat als Charakter in einem Streicherliteral zu haben, tun Sie so etwas wie,

char ident [] = "ab" cd ";

Der Backslash wird in einer Escape -Sequenz verwendet, um Konflikte mit Abgrenzern zu vermeiden. Um ein doppeltes Zitat als Charakter zu haben, ist der Backslash nicht erforderlich: '' 'ist in Ordnung. Um ein einziges Zitat in einem String -Literal zu haben, ist der Backslash nicht erforderlich: "Ab'cd" ist in Ordnung.

Da der Backslash verwendet wird, um einem Zeichen zu entkommen.

Fluchtabfolge

Eine Fluchtsequenz ist eine von:

\ '"\? \\ \ a \ b \ f \ n \ r> \ t \ v

Jede Escape-Sequenz wird normalerweise entweder als Zeichen innerhalb einzelner Zitate oder als Fluchtsequenz innerhalb von Doppelquotten tippt.

  • \ ': wird als einzelnes Zitatcharakter innerhalb einzelner Zitate verwendet.
  • \ ”: Wird als doppeltes Zitatcharakter innerhalb eines wörtlichen.
  • \? : seit ? ist ein reservierter Charakter, es sollte in einem wörtlichen Flucht geflohen werden.
  • \\: Der Backslash sollte als Zeichen oder in einem Streicherliteral entkommen, um nicht zu einer anderen Bedeutung zu führen.
  • \ A: Klingt einmal eine Alarmglocke, wenn sie als Zeichen oder in einem Saitenliteral verwendet wird.
  • ay.
  • \ f: führt dazu.
  • \ r: Gibt den Cursor zurück, in dem das nächste Zeichen gedruckt werden soll, jedoch innerhalb der aktuellen Linie.
  • \ n: Gibt den Cursor an den Beginn der nächsten Zeile oder nur in die nächste Zeile zurück, abhängig vom Betriebssystem.
  • \ t: Erstellt eine horizontale Registerkarte.
  • \ v: Erstellt eine vertikale Registerkarte.

Operationen mit Zeichen

Verkettung

Bei Definition können zwei String -Literale wie folgt mit dem Raum verbunden werden:

char ident [] = "abc" "def";
Cout << ident << "\n";

Die Ausgabe ist: ABCDEF . Diese Definition kann auf mehr als zwei Literale ausgedehnt werden. Hinweis: Die Anweisung ist eine Definition, nicht nur eine Zuweisung. Die Definition kann sogar die nächste Zeile fortsetzen, wobei der Raum die Linien wie folgt trennt:

char ident [] = "abc" "def"
"Ghi";
Cout << ident << "\n";

Die Ausgabe ist abcdefghi.

Hinweis: Zeichen können auf diese Weise nicht verkettet werden, da die einzelnen Zitate für das Zeichen nicht mehr als ein Symbol haben können.

Gleichstellungsoperatoren

Gleiche Zeichen im selben Fall sind gleich. Sie sind nicht gleich, wenn sie nicht vom gleichen Fall sind. In Betracht ziehen,

bool result = 'b' == 'b';
Cout << result << "\n";

== bedeutet gleich, während = Mittel zugewiesen und nicht gleich sind. Die Ausgabe ist 1 für True. In Betracht ziehen,

bool result = 'b' == 'b';
Cout << result << "\n";

Die Ausgabe ist 0 für false. In Betracht ziehen,

bool result = 'b' == 'c';
Cout << result << "\n";

Die Ausgabe ist 0 für false. In Betracht ziehen,

bool result = 'b' != 'B';
Cout << result << "\n";

!= Mittel nicht gleich, während = Mittel zugewiesen und nicht gleichberechtigt ist. Die Ausgabe ist 0 für false. In Betracht ziehen,

bool result = 'b' != 'B';
Cout << result << "\n";

Die Ausgabe ist 1 für True. In Betracht ziehen,

bool result = 'b' != 'C';
Cout << result << "\n";

Die Ausgabe ist 1 für True.

Also, == und != sind Gleichstellungsoperatoren.

Relationale Operatoren

Für gewöhnliche Zeichen in C ++ kommen in aufsteigender Reihenfolge Zahlen vor Großbuchstaben, die vor Kleinbuchstaben kommen.

So < will return true (1) when the left character is less than the right character. The other relational operators, , >= ähnlich erklärt werden.

Die Zeichenfolge wörtlich als Objekt

Das Array ist ein konstanter Zeiger auf den Beginn einer bestimmten Datentypsequenz. In ähnlicher Weise ist die Zeichenfolge ein konstanter Zeiger auf den Beginn einer Zeichensequenz. Vergleichen Sie die folgenden Definitionen:

int arr [] = 3, 4, 5, 6, 7;
char str [] = 'w', 'o', 'm', 'a', 'n';
Char Stri [] = "Frau";

Das erste Array ist ein Array von INTs und hat fünf Elemente. Die zweite und dritte Arrays sind Arrays von Zeichen mit unterschiedlichen Namen, aber die gleiche Anzahl von Elementen. Die zweite und dritte Arrays sind gleich, aber für ihre Namen. Der Textinhalt des zweiten Arrays wird durch Zahnspangen abgegrenzt. Die Zeichen werden durch Kommas getrennt und jedes Zeichen befindet sich in einzelnen Zitaten. Der Textinhalt des dritten Arrays wird durch Doppelzitate abgegrenzt. Die Zeichen werden nicht durch Kommas getrennt und jedes Zeichen befindet sich nicht in einzelnen Zitaten. Die zweite und dritte Arrays sind zwei Möglichkeiten, eine Schnur zu produzieren, wobei der dritte Weg der bessere Weg ist.

arr ist ein konstanter Zeiger auf das erste Element seines Arrays, was bedeutet. Die Größe des Arrays, fünf Elemente, bleibt nicht wirklich konstant. Jeder der Werte des Arrays kann jedoch geändert werden.

STR ist ein konstanter Zeiger auf das erste Element seines Arrays, was bedeutet. Die Größe des Charakterarrays, fünf Elemente, bleibt nicht wirklich konstant. Jeder der Werte des wörtlichen Wörtels kann jedoch geändert werden.

STRI ist ein konstanter Zeiger auf das erste Element seines wörtlichen (Array), was bedeutet. Die Größe des Saitenliterales (Array), fünf Elemente, bleibt nicht wirklich konstant. Jeder der Werte des Literales kann jedoch modifiziert werden.

Was ist konstant in einem Array- oder Streicherliteral? Die Speicheradresse des ersten Elements des Arrays oder der wörtlichen Literal. Nun, die Größe des Arrays oder des Wörtels bleibt nicht wirklich konstant. Jeder Wert im Array oder wörtlich kann geändert werden. Der folgende Code zeigt, wie sich das vierte Element jeder der Arrays geändert hat:

int arr [] = 3, 4, 5, 6, 7;
char str [] = 'w', 'o', 'm', 'a', 'n';
Char Stri [] = "Frau";
arr [3] = 9;
Str [3] = 'e';
stri [3] = 'e';
Cout << arr[3] << '\n';
Cout << str << '\n';
Cout << stri << '\n';

Die Ausgabe ist:

9
Frauen Frauen
Frauen

Beachten Sie, dass auf die Elemente eines definierten String -Literales, wie für die dritte Definition, mit dem Array -Index (Index) zugegriffen werden können. Der Grund für die zweite Zeile der Ausgabe ist unten angegeben.

Definitionsabfrage

Beachten Sie, dass es in den obigen Definitionen keine Ganzzahl für den Index gibt. Wenn die Anzahl der Elemente vom Programmierer nicht leicht ermittelt werden kann, sollte die Ganzzahl für das Index weggelassen werden. Was auch immer der Fall ist, die Ganzzahl sollte nicht geringer sein als die Anzahl der Elemente im Array.

Für die Saitenliteral sollte die Ganzzahl mindestens 1 höher sein als die Anzahl der Zeichen in der Zeichenfolge. Dies liegt daran. Das Nullzeichen wird am Ende des zweiten Arrays oben nicht hinzugefügt, da es sich nicht um eine offizielle Zeichenfolge handelt. Das dritte Array ist eine offizielle Zeichenfolge. Der folgende Code zeigt die minimalen Einweiswerte an.

int arr [5] = 3, 4, 5, 6, 7;
char str [5] = 'w', 'o', 'm', 'a', 'n';
Char Stri [6] = "Frau";

Um die zweite Definition zu einer offiziellen Zeichenfolge zu machen, muss das Nullzeichen wie folgt hinzugefügt werden:

int arr [5] = 3, 4, 5, 6, 7;
char str [6] = 'w', 'o', 'm', 'a', 'n', '\ 0';
Char Stri [6] = "Frau";

Die Ausgabe sollte jetzt sein,

9
Frauen
Frauen

Ohne die zweiten "Frauen". Beachten Sie, dass das entsprechende Index für das zweite Array 6 ist und nicht 5 wie es war.

Konstante wörtliche Werte

Um ein Zeichen in den doppelten Zitaten zu stoppen, die einer Bezeichnung zugeordnet sind, werden später im Programm die Definition mit dem reservierten Wort Const wie folgt vorgegangen:

const char ident [] = "Ich liebe dich";

Operationen mit String -Literalen

Gleichstellungsoperationen

Die Gleichstellungsoperatoren sind == und != . Wenn Variablen (Identifikatoren) von zwei Zeichenfolgen verglichen werden, sind es die Zeiger (Adressen) der Literale, die verglichen werden; das ist falsch. Um Strings zu vergleichen, müssen die Literale wie im folgenden Code verglichen werden:

bool result = "Frau" == "Frau";
Cout << result << '\n';

Die Ausgabe ist 1 für True. Der Vergleich erfolgt in der Wörterbuchmode, aber mit Zahlen in aufsteigender Reihenfolge vor Großbuchstaben, die vor Kleinbuchstaben kommen. Die Ausgabe des folgenden Code ist 0, für false.

bool result = "Frau" != "Frau";
Cout << result << '\n';

Relationale Operatoren mit String -Literalen

Relationale Operatoren arbeiten nicht mit String -Literalen zusammen.

Rohstraße wörtlich

Eine rohe Saitenliteral, ermöglicht es, eine Zeichenfolge als getippt anzuzeigen, die Fluchtsequenzen zu ignorieren und Newlines zu respektieren. Betrachten Sie den folgenden Code:

char str [] = r "(abc \\ d efg hij
klmn \ n "'opq
rst) ";
Cout << str << '\n';

Die Ausgabe ist:

abc \\ d efg hij
klmn \ n "'opq
RST

Im Code beginnt das Roh -String -Literal mit R, gefolgt von “und ( . Es endet mit) und “.

C ++ Hauptstring -Literaltypen

verkohlen

Der Zeichenentyp ist der ursprüngliche C ++ - Typ und speichert normalerweise ein Zeichen in 8 Bits.

char16_t

Dies speichert einen Charakter in 16 Bits.

char32_t

Dies speichert einen Charakter in 32 Bits.

wchar_t

char16_t und char32_t sind breite Zeichen. WCHAR_T ist ein proprietär und implementierter Weitcharakter, der definiert ist.

Abschluss

Ein Charakterliteral ist ein einzelnes Zeichen in einzelnen Zitaten. Eine Fluchtsequenz ist ein Zeichen, das auch in einzelnen Zitaten sein kann. Ein String-Literal ist eine Folge von Zeichen in Doppelquoten. Ein String -Literal ist eine Reihe von Zeichen, die mit \ 0 enden. Die Gleichheit und die relationalen Operatoren arbeiten mit Charakterliteralen zusammen. Die Gleichstellungsbetreiber arbeiten mit String -Literalen zusammen, aber die relationalen Operatoren arbeiten nicht mit String -Literalen zusammen. Zeichenkennungen können in Vergleiche verwendet werden, aber String -Kennungen sollten nicht in Vergleiche verwendet werden. Mit einem rohen Saitenliteral kann eine Zeichenfolge als getippt angezeigt werden, wobei die Escape -Sequenzen ignoriert werden und neue Zeilen respektieren.