C++

So verwenden Sie C++-String-Literal

So verwenden Sie C++-String-Literal
Auf der Computertastatur sind Zeichen aufgedruckt. Wenn Sie eine Taste drücken, sehen Sie das Zeichen auf dem Bildschirm. Hinweis: Leerzeichen ist auch ein Zeichen. Ein String-Literal ist eine Folge von Zeichen. In diesem Artikel wird die Verwendung von C++-String-Literalen erläutert. Sie sollten über C++-Arrays und -Zeiger Bescheid wissen, um diesen Artikel zu verstehen.

Zeichenbuchstabe

Ein Zeichenliteral ist ein Zeichen in einfachen Anführungszeichen. So,

char ident1 = 'A'; char ident2 = 'b'; Zeichenkennung3 = '4'; char ident4 = '6';

sind alle unterschiedliche Definitionen von Zeichen. Beachten Sie, dass eine Ziffer in einfachen Anführungszeichen ein Zeichen und keine ganze Zahl ist.

Eine Escape-Sequenz wie \” (siehe unten) in einfachen Anführungszeichen ist ein Zeichen. So,

char ident1 = '"';

ist ein Charakter.

Ein einzelnes Symbol in doppelten Anführungszeichen ist kein Zeichen; es ist eine Zeichenfolge aus einem Zeichen. „A“ oder „c“ oder „2“ ist also kein Zeichen, sondern eine Zeichenfolge mit jeweils einem Zeichen.

Die Variable eines char kann später im Programm wie folgt neu zugewiesen werden:

Zeichenidentifikation = 'x';
Kennung = 'Y';

Um zu verhindern, dass ein einem Bezeichner zugewiesenes Zeichen später im Programm geändert wird, stellen Sie der Definition das reservierte Wort const wie folgt voran:

const char ident = 'd';

Die Variable ident soll schreibgeschützt sein.

String-Literal

Ein String-Literal ist eine Folge von Zeichen in doppelten Anführungszeichen. 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 unterschiedliche Definitionen von String-Literalen. Beachten Sie die Verwendung von doppelten Anführungszeichen. Es gibt nichts Besseres als eine gewöhnliche Variable für einen String. Ein String-Literal ist ein Array von Zeichen, wobei die Sequenz nicht mit begrenzt wird, sondern mit „“. Die Zeichen werden nicht durch Kommas getrennt. Jede Zahl, die größer ist als die Anzahl der Zeichen im String-Literal, kann in die eckigen Klammern gesetzt werden. Es ist jedoch besser, die eckigen Klammern leer zu lassen.

Ein einzelnes Zeichen in doppelten Anführungszeichen ist kein Zeichen; es ist eine Zeichenfolge aus einem Zeichen. „A“ oder „c“ oder „2“ ist also kein Zeichen, sondern eine Zeichenfolge mit je einem Zeichen.

Eine String-Variable erlaubt keine Neuzuweisung des kompletten Literals, später unten im Programm - siehe unten. Einzelne Zeichen können jedoch neu zugewiesen werden - siehe unten.

Einfaches und doppeltes Anführungszeichen in Zeichen oder Literal

Um ein einzelnes Anführungszeichen als Zeichen zu haben, tun Sie etwas wie,

Zeichenidentifikation = '\'';

Um ein doppeltes Anführungszeichen als Zeichen in einem String-Literal zu haben, tun Sie etwas wie,

char ident[] = "ab"cd";

Der Backslash wird in einer Escape-Sequenz verwendet, um Konflikte mit Trennzeichen zu vermeiden. Um ein doppeltes Anführungszeichen als Zeichen zu haben, ist der Backslash nicht erforderlich: '”' ist in Ordnung. Um ein einfaches Anführungszeichen in einem String-Literal zu haben, ist kein Backslash erforderlich: „ab'cd“ ist in Ordnung.

Da der Backslash verwendet wird, um ein Zeichen zu maskieren, muss er mit einem anderen Backslash maskiert werden, wenn er als Zeichen oder in einem String-Literal verwendet wird.

Fluchtabfolge

Eine Escape-Sequenz ist eine von:

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

Jede Escape-Sequenz wird normalerweise entweder als Zeichen in einfachen Anführungszeichen oder als Escape-Sequenz in doppelten Anführungszeichen eingegeben.

Operationen mit Charakteren

Verkettung

Bei der Definition können zwei String-Literale wie folgt mit Leerzeichen verbunden werden:

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

Die Ausgabe ist: abcdef . Diese Definition kann auf mehr als zwei Literale erweitert werden. Hinweis: Die Aussage ist eine Definition, nicht nur eine Zuweisung. Die Definition kann sogar bis zur nächsten Zeile fortgesetzt werden, wobei die Zeilen wie folgt durch Leerzeichen getrennt werden:

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

Die Ausgabe ist, abcdefghi.

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

Gleichstellungsoperatoren

Gleiche Zeichen im gleichen Fall sind gleich. Sie sind nicht gleich, wenn sie nicht vom gleichen Fall sind. Erwägen,

bool result = 'B' == 'B';
cout << result << "\n";

== bedeutet gleich, während = bedeutet zugewiesen und nicht gleich. Die Ausgabe ist 1 für wahr. Erwägen,

bool result = 'B' == 'b';
cout << result << "\n";

Die Ausgabe ist 0 für false. Erwägen,

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

Die Ausgabe ist 0 für false. Erwägen,

bool result = 'B' != 'B';
cout << result << "\n";

!= bedeutet ungleich, während = bedeutet zugewiesen und ungleich. Die Ausgabe ist 0 für false. Erwägen,

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

Die Ausgabe ist 1 für wahr. Erwägen,

bool result = 'b' != 'c';
cout << result << "\n";

Die Ausgabe ist 1 für wahr.

Also, == und != sind Gleichheitsoperatoren.

Relationale Operatoren

Bei gewöhnlichen Zeichen in C++ stehen in aufsteigender Reihenfolge Zahlen vor Großbuchstaben, die vor Kleinbuchstaben stehen.

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

Das String-Literal als Objekt

Das Array ist ein konstanter Zeiger auf den Anfang einer bestimmten Datentypsequenz. Ebenso ist der String ein konstanter Zeiger auf den Anfang einer Zeichenfolge. 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. Das zweite und dritte Array sind Arrays von Zeichen mit unterschiedlichen Namen, aber der gleichen Anzahl von Elementen. Das zweite und das dritte Array sind gleich, aber für ihre Namen. Der Textinhalt des zweiten Arrays wird durch geschweifte Klammern begrenzt; die Zeichen werden durch Kommas getrennt und jedes Zeichen steht in einfachen Anführungszeichen. Der Textinhalt des dritten Arrays wird durch doppelte Anführungszeichen begrenzt; die Zeichen werden nicht durch Kommas getrennt und jedes Zeichen steht nicht in einfachen Anführungszeichen. Das zweite und dritte Array sind zwei Möglichkeiten, einen String zu erzeugen, wobei der dritte Weg der bessere ist.

arr ist ein konstanter Zeiger auf das erste Element seines Arrays, was bedeutet, dass arr immer auf die Stelle mit der Ganzzahl 3 zeigt, auch wenn der Wert von 3 geändert wird. 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, dass str immer auf die Stelle mit dem Zeichen 'w' zeigt, auch wenn der Wert von 'w' geändert wird. Die Größe des Zeichenarrays, fünf Elemente, bleibt nicht wirklich konstant. Jeder der Werte des Literals kann jedoch geändert werden.

stri ist ein konstanter Zeiger auf das erste Element seines Literals (Array), was bedeutet, dass stri immer auf die Stelle mit dem Zeichen zeigt, auch wenn der Wert von w geändert wird. Die Größe des String-Literals (Array), fünf Elemente, bleibt nicht wirklich konstant. Jeder der Werte des Literals kann jedoch geändert werden.

Was ist in einem Array- oder String-Literal konstant?? Die Speicheradresse des ersten Elements des Arrays oder Literals bleibt als Wert des Namens (Identifier) ​​des Arrays oder Literals erhalten und kann nicht geändert werden. Nun, die Größe des Arrays oder Literals bleibt nicht wirklich konstant. Jeder Wert im Array oder Literal kann geändert werden. Der folgende Code zeigt, wie das vierte Element jedes der Arrays geändert wurde:

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-Literals, wie bei der dritten Definition oben, mit dem Array-Index (tiefgestellt) zugegriffen werden kann. Der Grund für die zweite Zeile der Ausgabe ist unten angegeben.

Definition tiefgestellt

Beachten Sie, dass es in den obigen Definitionen keine ganze Zahl für tiefgestellte Zahlen gibt. Wenn die Anzahl der Elemente vom Programmierer nicht leicht bestimmt werden kann, sollte die ganze Zahl für den Index weggelassen werden. In jedem Fall sollte die ganze Zahl nicht kleiner sein als die Anzahl der Elemente im Array.

Für das String-Literal sollte die ganze Zahl mindestens 1 höher sein als die Anzahl der Zeichen in der Zeichenfolge. Dies liegt daran, dass das Nullzeichen (\0) immer vom Compiler hinzugefügt wird, am Ende eines Arrays, das eine Zeichenfolge ist, getrennt durch doppelte Anführungszeichen. Das Nullzeichen wird nicht am Ende des zweiten Arrays oben hinzugefügt, da es kein offizieller String ist. Das dritte Array ist ein offizieller String. Der folgende Code zeigt die minimalen tiefgestellten Werte.

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 einem offiziellen String 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 der entsprechende Index für das zweite Array 6 ist und nicht wie bisher 5.

Konstante Literwerte

Um zu verhindern, dass Zeichen in den doppelten Anführungszeichen, die einem Bezeichner zugewiesen sind, später im Programm geändert werden, stellen Sie der Definition das reservierte Wort const wie folgt voran:

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

Operationen mit String-Literalen

Gleichstellungsoperationen

Die Gleichheitsoperatoren sind == und != . Wenn Variablen (Bezeichner) von zwei Strings verglichen werden, sind es die Zeiger (Adressen) der Literale, die am Ende 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 wahr. Der Vergleich erfolgt nach dem Wörterbuch-Prinzip, aber mit Zahlen zuerst in aufsteigender Reihenfolge, vor Großbuchstaben, die vor Kleinbuchstaben kommen. Die Ausgabe des folgenden Codes ist 0, für false.

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

Relationale Operatoren mit String-Literalen

Relationale Operatoren funktionieren nicht mit String-Literalen.

Rohes String-Literal

Ein unformatiertes String-Literal, ermöglicht die Anzeige eines Strings als typisiert, ignoriert Escape-Sequenzen und respektiert Zeilenumbrüche. Betrachten Sie den folgenden Code:

char str[] = R"(abc\\d efg hij
klmn \n " ' opq
zuerst)";
cout << str << '\n';

Die Ausgabe ist:

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

Im Code beginnt das Rohstringliteral mit R, gefolgt von ” und ( . Es endet mit ) und „.

C++-Hauptstring-Literaltypen

verkohlen

Der Typ char ist der ursprüngliche C++-Typ und würde normalerweise ein Zeichen in 8 Bit speichern.

char16_t

Dies speichert ein Zeichen in 16 Bit.

char32_t

Dies speichert ein Zeichen in 32 Bit.

wchar_t

char16_t und char32_t sind breite Zeichen. wchar_t ist ein Breitzeichen, das proprietär und implementierungsdefiniert ist.

Fazit

Ein Zeichenliteral ist ein einzelnes Zeichen in einfachen Anführungszeichen. Eine Escape-Sequenz ist ein Zeichen, das auch in einfachen Anführungszeichen stehen kann. Ein String-Literal ist eine Folge von Zeichen in doppelten Anführungszeichen. Ein String-Literal ist ein Array von Zeichen, die mit \0 . enden. Die Gleichheits- und Vergleichsoperatoren arbeiten mit Zeichenliteralen. Die Gleichheitsoperatoren funktionieren mit Zeichenfolgenliteralen, aber die Vergleichsoperatoren funktionieren nicht mit Zeichenfolgenliteralen. Zeichenbezeichner können in Vergleichen verwendet werden, Zeichenfolgenbezeichner sollten jedoch nicht in Vergleichen verwendet werden. Ein unformatiertes String-Literal ermöglicht die Anzeige eines Strings als eingegeben, ignoriert die Escape-Sequenzen und respektiert Zeilenumbrüche.

Chrys

Battle for Wesnoth-Tutorial
The Battle for Wesnoth ist eines der beliebtesten Open-Source-Strategiespiele, die Sie derzeit spielen können. Dieses Spiel befindet sich nicht nur se...
0 A.D. Lernprogramm
Von den vielen Strategiespielen da draußen, 0 A.D. schafft es, sich trotz Open Source als umfassender Titel und sehr tiefgehendes, taktisches Spiel ab...
Unity3D-Tutorial
Einführung in Unity 3D Unity 3D ist eine leistungsstarke Engine für die Spieleentwicklung. Es ist plattformübergreifend, das heißt, Sie können Spiele ...