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.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Fortgeschrittener mit einer Abschlussquote von 63% ist. Es hat eine positive Bewertungsrate von 100% von den Lernenden erhalten.

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.