C++ String Grundlagen

C++Beginner
Jetzt üben

Einführung

In diesem Lab lernst du Strings in C++. Du wirst lernen, wie man Strings definiert und initialisiert und wie man String-Funktionen verwendet.

Inhaltsvorschau

C++ unterstützt zwei Arten von Strings:

  1. Ein String ist ein char-Array, das mit einem NULL-Zeichen '\0' (Hex 0) abgeschlossen ist. Es wird auch als Zeichenkette oder C-Style-String bezeichnet.
  2. Die in C++98 eingeführte neue string-Klasse.

Die "höhere Ebene" string-Klasse wird empfohlen, da sie viel einfacher zu verwenden und zu verstehen ist. Allerdings wurden in vielen älteren Programmen C-Strings verwendet; viele Programmierer verwenden auch "niedrigere Ebene" C-Strings für volle Kontrolle und Effizienz; außerdem werden in einigen Situationen wie bei Befehlszeilenargumenten nur C-Strings unterstützt. Daher müssen Sie möglicherweise beide Arten von Strings verstehen.

  • Stringdeklaration und -initialisierung
  • String-Eingabe/Ausgabe
  • Stringoperationen

Stringdeklaration und Initialisierung

Um die string-Klasse zu verwenden, fügen Sie den Header <string> hinzu und verwenden "using namespace std".

Sie können einen String mit einem String-Literal deklarieren und initialisieren, auf eine leere Zeichenkette initialisieren oder mit einem anderen String-Objekt initialisieren. Beispielsweise:

#include <string>
using namespace std;

string str1("Hello");  // Initialisierung mit einem String-Literal (implizite Initialisierung)
string str2 = "world"; // Initialisierung mit einem String-Literal (explizite Initialisierung über Zuweisungsoperator)
string str3;           // Initialisierung auf eine leere Zeichenkette
string str4(str1);     // Initialisierung durch Kopieren von einem vorhandenen String-Objekt

String-Eingabe/Ausgabe

Beispiel

/* Testing string class input and output */
#include <iostream>
#include <string>     // Brauchen diesen Header, um die string-Klasse zu verwenden
#include <limits>
using namespace std;  // Auch erforderlich für <string>

int main() {
   string message("Hello");
   cout << message << endl;

   // Eingabe eines Wortes (durch Leerzeichen getrennt) in einen String
   cout << "Enter a message (no space): ";
   cin >> message;
   cout << message << endl;

   cin.ignore(numeric_limits<streamsize>::max(), '\n');
   // Leert den Eingabepuffer bis zum Zeilenumbruch (braucht <limits> Header)

   // Eingabe einer Zeile in einen String
   cout << "Enter a message (with spaces): ";
   getline(cin, message);  // Liest die Eingabe von cin in message
   cout << message << endl;
   return 0;
}

Ausgabe:

Hello
Enter a message (no space): hello
hello
Enter a message (with spaces): hello world
hello world

image desc

HINWEISE:

  • Wir müssen "#include <string>" verwenden, um die string-Klasse zu nutzen, und "using namespace std", da string im std-Namespace definiert ist.
  • "cin >> aStr" liest ein Wort (durch Leerzeichen getrennt) von cin (Tastatur) und weist es der string-Variablen aStr zu.
  • getline(cin, aStr) liest die gesamte Zeile (bis zu '\n') von cin und weist es aStr zu. Das '\n'-Zeichen wird verworfen.
  • Um cin zu leeren, können Sie die ignore(numeric_limits<streamsize>::max(), '\n')-Funktion verwenden, um alle Zeichen bis zu '\n' zu entfernen. numeric_limits befindet sich im <limits>-Header.

Stringoperationen

  • Länge eines Strings prüfen:

    string str("Hello, world");
    // Beide geben die Länge des Strings zurück
    cout << str.length() << endl;  // 12
    cout << str.size()   << endl;  // 12
    
  • Prüfen auf leeren String:

    string str1("Hello, world");
    string str2;                   // Leerer String
    // Prüfen, ob der String leer ist.
    cout << str1.empty() << endl;  // 0 (false)
    cout << str2.empty() << endl;  // 1 (true)
    
  • Kopieren von einem anderen String: Verwenden Sie einfach den Zuweisungsoperator "=".

    string str1("Hello, world"), str2;
    str2 = str1;
    cout << str2 << endl;   // Hello, world
    
  • Verkettung mit einem anderen String: Verwenden Sie den Plus-Operator "+", oder den zusammengesetzten Plus-Operator "+=".

    string str1("Hello,");
    string str2(" world");
    cout << str1 + str2 << endl;  // "Hello, world"
    cout << str1 << endl;         // "Hello,"
    cout << str2 << endl;         // " world"
    str1 += str2;
    cout << str1 << endl;  // "Hello, world"
    cout << str2 << endl;  // " world"
    string str3 = str1 + str2;
    cout << str3 << endl;  // "Hello, world world"
    str3 += "again";
    cout << str3 << endl;  // "Hello, world worldagain"
    
  • Einzelne Zeichen eines Strings lesen/schreiben:

    string str("Hello, world");
    // Gibt das Zeichen an der angegebenen Position zurück. Die Indizes beginnen bei 0. Es wird eine Indexgrenzenprüfung durchgeführt.
    cout << str.at(0) << endl;  // 'H'
    cout << str[1] << endl;     // 'e'
    cout << str.at(str.length() - 1) << endl;  // 'd'
    
    str.at(1) = 'a';  // Schreibt an Index 1
    cout << str << endl;  // "Hallo, world"
    
    str[0] = 'h';
    cout << str << endl;  // "hallo, world"
    
  • Extraktion eines Teilstrings:

    string str("Hello, world");
    // Gibt den Teilstring zurück, der bei beginIndex beginnt und die angegebene Größe hat
    cout << str.substr(2, 6) << endl;  // "llo, w"
    
  • Vergleich mit einem anderen String:

    string str1("Hello"), str2("Hallo"), str3("hello"), str4("Hello");
    cout << str1.compare(str2) << endl;   // 1   'e' > 'a'
    cout << str1.compare(str3) << endl;   // -1  'h' < 'H'
    cout << str1.compare(str4) << endl;   // 0
    
    // Sie können auch den Operator == oder!= verwenden
    if (str1 == str2) cout << "Same" << endl;
    if (str3!= str4) cout << "Different" << endl;
    cout << boolalpha;  // Gibt bool-Werte als true/false aus
    cout << (str1!= str2) << endl;
    cout << (str1 == str4) << endl;
    
  • Suchen/Ersetzen von Zeichen: Sie können die in #include <algorithm> verfügbaren Funktionen verwenden

    Beispielsweise:

    #include <algorithm>
    ......
    string str("Hello, world");
    replace(str.begin(), str.end(), 'l', '_');
    cout << str << endl;    // He__o, wor_d
    

Beispiel

/* Example on C++ string function */
#include <iostream>
#include <string>    // verwenden Sie die string-Klasse
using namespace std;

int main() {
   string msg = "hello, world!";
   cout << msg << endl;
   cout << msg.length() << endl;  // Länge des Strings
   cout << msg.at(1) << endl;     // Zeichen an Index 1
   cout << msg[1] << endl;        // wie oben
   cout << msg.empty() << endl;   // Prüfung auf leeren String
   cout << msg.substr(3, 3) << endl; // Teilstring beginnt bei
                                     // Position 3 und hat die Größe 3
   cout << msg.replace(3, 3, "why") << endl; // Ersetzt den Teilstring
   cout << msg.append("end") << endl;        // Anhängt am Ende
   cout << msg + "end" << endl;              // wie oben
   cout << msg.insert(3, "insert") << endl;  // Fügt nach Position 3 ein

   string msg1;
   msg1 = msg;   // Kopiert
   cout << msg1 << endl;

   cout << "Enter a line: ";
   getline(cin, msg);   // Liest eine Zeile von der Eingabe
   cout << msg << endl;
}

Ausgabe:

hello, world!
13
e
e
0
lo,
helwhy world!
helwhy world!end
helwhy world!endend
helinsertwhy world!end
helinsertwhy world!end
Enter a line: a
a

image desc

Zusammenfassung

Der String ist ein weiterer wichtiger Datentyp neben Zahlen. In diesem Abschnitt haben wir die Verwendung von Strings behandelt. C++ bietet viele nützliche Methoden zur Bearbeitung von Strings. Lernen Sie, sie mit Leichtigkeit zu verwenden.