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:

  1. Erstellen Sie ein Character-Array, um einen String zu bilden
  2. Verwenden Sie die Standardbibliothek String in 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.h bietet zahlreiche Funktionen für NULL-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