HOWTO · C++
Vergleich von String und Character in C++
Ein Artikel über die Verwendung von String und Char in C++ und deren Vergleich.
In diesem trivialen Leitfaden geht es um die Verwendung von Strings in C++ und wie diese Strings mit anderen Literalen verglichen werden. Bevor wir fortfahren, werden wir Strings in C++ kurz vorstellen.
In C++ können Strings auf zwei verschiedene Arten kategorisiert werden:
- Erstellen Sie ein
Character-Array, um einen String zu bilden - Verwenden Sie die Standardbibliothek
Stringin C++
Erstellen ein Zeichenarray in C++
Wie in der C-Sprache bietet uns C++ auch Zeichen-Arrays, d.h. char-Array, die als String-Literal verwendet werden können. Es ist ein eindimensionales Array von Zeichen, das durch eine null abgeschlossen wird.
Der String wird also erstellt, indem ein char-Array gebildet und mit einem null-Zeichen abgeschlossen wird.
Bitte beachten Sie, dass zum Drucken eines Zeichenarrays mit einer Aggregatmethode (z. B. cout<< charArray) ein null-Zeichen das Zeichenarray beenden muss. C++ verwendet \0 als NULL-Zeichen und hilft Aggregatmethoden, das Ende der Zeichenkette zu erkennen (es ist unmöglich, das Ende eines Arrays ohne ein Endmarkierungssymbol zu erkennen).
Daher deklariert das folgende Beispiel ein Zeichen-Array der Größe 11, obwohl “C-Sprache” nur zehn Zeichen enthält.
char word[11] = {'C', '-', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'};
Die obige Anweisung kann auch wie folgt geschrieben werden, vorausgesetzt, Sie befolgen die Initialisierungsregeln.
char word[] = "C-language";
Wenn Sie vergessen, das null-Zeichen ans Ende zu setzen, setzt der Compiler implizit das null-Zeichen ans Ende selbst. Werfen wir einen Blick auf das Programm unten.
#include <iostream>
using namespace std;
int main() {
char word[11] = {'C', '-', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'};
cout << "First message: ";
cout << word << endl;
return 0;
}
Zeile Nr. 06 im obigen Code-Snippet trägt First Message: zur Ausgabe bei, während Zeile Nr. 07 alle Zeichen in der Variable word anzeigt, bis sie auf \0 stoßen. Daher generiert das obige Code-Snippet die folgende Ausgabe.
First Message: C-language
Verwendung von die Bibliothek String in C++
C++ hat eine eingebaute string.h-Header-Datei als Teil seiner Standardbibliothek. Es bietet ein Bündel von Funktionalitäten (z. B. strcpy, strlen usw.), um mit Strings im C-Stil (d. h. nullterminierten Strings) zu arbeiten.
Bitte beachten Sie, dass sich alle modernen string-Bibliotheken, die ohne .h enthalten sind, von string.h unterscheiden. Die string-Klassenbibliothek ist eine C++-Bibliothek zur Manipulation moderner C++-Strings, während string.h eine C-Header-Datei zur Manipulation von Strings im C-Stil (d. h. nullterminierte Strings) ist.
Schauen wir uns den folgenden Code an, um die Bibliothek string.h zu verstehen.
#include <string.h>
#include <iostream>
using namespace std;
int main() {
char country[] = "Pakistan";
char countryTemp[50] = "abc";
cout << "countryTemp length before initializing is:";
cout << strlen(countryTemp) << endl;
// strcpy()
cout << "Let's copy country to countryTemp" << endl;
strcpy(countryTemp, country);
cout << "countryTemp=" << countryTemp << endl;
cout << "countryTemp length after copying country is:";
cout << strlen(countryTemp) << endl;
return 0;
}
Das obige Programm deklariert zunächst zwei Zeichen-Arrays (C-Strings) und initialisiert das erste mit Pakistan. Zeile 10 gibt die Länge von countryTemp aus, die 3 ist.
Obwohl die Gesamtgröße von countryTemp 50 Bytes beträgt, kann strcpy die Größe nur basierend auf dem NULL-Zeichen (im vierten Byte des Arrays platziert) berechnen. Daher gibt strcpy 3 zurück.
Zeile 14 verwendet die Funktion strcpy, um den Inhalt des Arrays country nach countryTemp zu kopieren. Daher wird die neue Länge von countryTemp zu 8.
Ausgabe:
countryTemp length before initializing is:3
Let's copy country to countryTemp
countryTemp=Pakistan
countryTemp length after copying country is:8
Hinweis: Die Header-Datei
string.hbietet zahlreiche Funktionen fürNULL-terminierte Strings (auch bekannt als C-Style-Strings). Weitere verfügbare Bibliotheksfunktionen finden Sie hier.
Vergleich von Strings mit Char in C++
Es ist ein allgemeines Problem für Leute, Strings mit Zeichenkonstanten zu vergleichen. Dies ist praktisch nicht möglich.
Betrachten Sie den folgenden Code.
#include <iostream>
using namespace std;
int main() {
cout << "Do you want to proceed (y or n)?\n";
char inp;
cin >> inp;
if (inp == "y") // error here
cout << "Hello again" << endl;
else
cout << "Good Bye" << endl;
return 0;
}
Hier in dieser Funktion haben wir eine Eingabe vom Benutzer vorgenommen, die eine char-Variable ist, und in der if-Bedingung vergleichen wir sie mit einem String-Literal, das in doppelte Anführungszeichen eingeschlossen ist. Dieser Code generiert den Fehler error: ISO C++ forbids comparison between pointer and integer.
Es wird empfohlen, die Eingabe in der Variablen string anstelle der Variablen char zu übernehmen, um diesen Fehler zu vermeiden.
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Do you want to proceed (y or n)?\n";
string ans;
cin >> ans;
if (ans == "y") // error here
cout << "Hello again" << endl;
else
cout << "Good Bye" << endl;
return 0;
}
Ausgabe:
Do you want to proceed (y or n)?
n
Good Bye