So verwenden Sie C++-String-Literal

How Use 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 erläutert, wie Sie C++-Zeichenfolgenliterale verwenden. 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,



verkohlenident1= 'ZU'; verkohlenident2= 'B'; verkohlenident3= '4'; verkohlenident4= '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,



verkohlenident1= ''';

ist ein Charakter.

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

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



verkohlenident= 'x';
ident= 'UND';

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 verkohlenident= 'D';

Die Variable ident soll schreibgeschützt sein.

String-Literal

Ein String-Literal ist eine Folge von Zeichen in doppelten Anführungszeichen. So,

verkohlenident1[] = 'Ich liebe dich'; verkohlenident2[] = „Ich hasse 3 von euch“; verkohlenident3[]
= 'Wir sind die Welt'; verkohlenident4[] = '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 {}, sondern mit begrenzt wird. 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 von 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 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 verwenden, gehen Sie wie folgt vor:

verkohlenident= ' '';

Um ein doppeltes Anführungszeichen als Zeichen in einem Zeichenfolgenliteral zu verwenden, gehen Sie wie folgt vor:

verkohlenident[] = '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 der Backslash nicht 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:

''? \ zu B F R>T v

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

  • ’ : wird als einfaches Anführungszeichen in einfachen Anführungszeichen verwendet.
  • : wird als doppeltes Anführungszeichen innerhalb eines Literals verwendet.
  • ? : schon seit ? ein reserviertes Zeichen ist, sollte es in einem Literal maskiert werden.
  • \ : Der Backslash sollte als Zeichen oder in einem String-Literal maskiert werden, damit er keine andere Bedeutung erhält.
  • a : ertönt einmal eine Alarmglocke, wenn sie als Zeichen oder in einem String-Literal verwendet wird.
  •  : ergibt sich als Backspace in der Anzeige innerhalb eines String-Literals, wobei das vorherige Zeichen entfernt wird.
  • f : bewirkt, dass die nächste Seite dem Drucker zugeführt wird, wenn sie als Zeichen oder innerhalb eines Literals verwendet wird.
  • : Gibt den Cursor zurück, an dem das nächste Zeichen gedruckt werden soll, jedoch innerhalb der aktuellen Zeile.
  • : bringt den Cursor zum Anfang der nächsten Zeile oder nur zur nächsten Zeile, je nach Betriebssystem.
  • : erstellt eine horizontale Registerkarte.
  • v : Erstellt eine vertikale Registerkarte.

Operationen mit Charakteren

Verkettung

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

verkohlenident[] = 'ABC' 'def';
Kosten<<ident<< ' ';

Die Ausgabe ist: abcdef . Diese Definition kann auf mehr als zwei Literale erweitert werden. Hinweis: Die Anweisung 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:

verkohlenident[] = 'ABC' 'def'
'beachten';
Kosten<<ident<< ' ';

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 ergebnis= 'B' == 'B';
Kosten<<Ergebnis<< ' ';

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

bool ergebnis= 'B' == 'B';
Kosten<<Ergebnis<< ' ';

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

bool ergebnis= 'B' == 'C';
Kosten<<Ergebnis<< ' ';

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

bool ergebnis= 'B' ! = 'B';
Kosten<<Ergebnis<< ' ';

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

bool ergebnis= 'B' ! = 'B';
Kosten<<Ergebnis<< ' ';

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

bool ergebnis= 'B' ! = 'C';
Kosten<<Ergebnis<< ' ';

Die Ausgabe ist 1 für wahr.

== und != sind also Gleichheitsoperatoren.

Relationale Operatoren

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

So= 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:

intarr[] = {3, 4, 5, 6, 7};
verkohlenP[] = {'in', 'oder', 'm', 'zu', 'n'};
verkohlenstr[] = '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 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 Position 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 (Bezeichners) 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:

intarr[] = {3, 4, 5, 6, 7};
verkohlenP[] = {'in', 'oder', 'm', 'zu', 'n'};
verkohlenstr[] = 'Frau';

arr[3] = 9;
P[3] = 'Und';
str[3] = 'Und';

Kosten<<arr[3] << ' ';
Kosten<<P<< ' ';
Kosten<<str<< ' ';

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 (Index) 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 Werte 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 Ganzzahl nicht kleiner sein als die Anzahl der Elemente im Array.

Für das Zeichenfolgenliteral sollte die Ganzzahl mindestens 1 höher sein als die Anzahl der Zeichen in der Zeichenfolge. Dies liegt daran, dass das Nullzeichen () immer vom Compiler am Ende eines Arrays hinzugefügt wird, bei dem es sich um eine Zeichenfolge handelt, die durch doppelte Anführungszeichen getrennt ist. Das Nullzeichen wird nicht am Ende des zweiten Arrays oben hinzugefügt, da es sich nicht um eine offizielle Zeichenfolge handelt. Das dritte Array ist ein offizieller String. Der folgende Code zeigt die minimalen Indexwerte.

intarr[5] = {3, 4, 5, 6, 7};
verkohlenP[5] = {'in', 'oder', 'm', 'zu', 'n'};
verkohlenstr[6] = 'Frau';

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

intarr[5] = {3, 4, 5, 6, 7};
verkohlenP[6] = {'in', 'oder', 'm', 'zu', 'n', ' 0'};
verkohlenstr[6] = 'Frau';

Die Ausgabe sollte nun lauten:

9
Frauen
Frauen

ohne die zweite Frau. Beachten Sie, dass der entsprechende Index für das zweite Array 6 ist und nicht wie bisher 5.

Konstante Literwerte

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

const verkohlenident[] = 'Ich liebe dich';

Operationen mit String-Literalen

Gleichstellungsoperationen

Die Gleichheitsoperatoren sind == und != . Wenn Variablen (Bezeichner) zweier 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 ergebnis= 'Frau' == 'Frau';
Kosten<<Ergebnis<< ' ';

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 ergebnis= 'Frau' ! = 'Frau';
Kosten<<Ergebnis<< ' ';

Relationale Operatoren mit String-Literalen

Relationale Operatoren funktionieren nicht mit Zeichenfolgenliteralen.

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:

verkohlenP[] =R'(ABC\d efg er
klmn '
'opq
zuerst)';
Kosten<< str << '
';

Die Ausgabe ist:

abc\d efg he
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 Breitzeichen. wchar_t ist ein Breitzeichen, das proprietär und implementierungsdefiniert ist.

Abschluss

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 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