Wird geladen...

String-Verarbeitung in C++: C-Style und std::string

Lernen Sie String-Verarbeitung in C++ mit C-Style-Strings und std::string anhand praktischer Beispiele.

In C++ können Text- (String-) Operationen sowohl mit klassischen C-Style-Zeichenarrays (char arrays) als auch mit der modernen std::string-Klasse durchgeführt werden. C-Style-Arrays bieten eine niedrigstufige Kontrolle, während die std::string-Klasse sicherer und bequemer ist. In diesem Artikel werden wir alle Aspekte der Arbeit mit Zeichenketten im Detail untersuchen.


1. C-Style-Strings (char Arrays)

C-Style-Strings sind char-Arrays, die mit einem Nullzeichen ('\0') enden. Sie werden im Speicher als fortlaufende Zeichenfolge gespeichert.


#include <iostream>
using namespace std;

int main() {
    char nachricht1[] = "Hallo";       // '\0' wird automatisch hinzugefügt
    char nachricht2[20] = "C++";       // Maximal 19 Zeichen + '\0'

    cout << nachricht1 << " " << nachricht2 << endl;
    return 0;
}

Beim Arbeiten mit C-Style-Strings ist es wichtig, nicht über die Grenzen des Arrays hinauszuschreiben. C++ überprüft bei C-Style-Strings keine Array-Grenzen automatisch.


2. strcpy, strcat, strlen, strcmp (C-String-Funktionen)

Beim Arbeiten mit C-Style-Strings werden häufig die Funktionen aus der <cstring>-Bibliothek verwendet:


#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char a[20] = "C++";
    char b[20] = "Programmierung";

    // Verketten
    strcat(a, " ");        // a = "C++ "
    strcat(a, b);          // a = "C++ Programmierung"

    // Kopieren
    char c[20];
    strcpy(c, a);

    // Länge
    cout << "Länge: " << strlen(a) << endl;

    // Vergleich
    if (strcmp(a, c) == 0)
        cout << "A und C sind gleich." << endl;

    cout << "Ergebnis: " << a << endl;
}

Diese Funktionen müssen mit Vorsicht verwendet werden, da sie ein Pufferüberlauf-Risiko bergen. In modernem C++ wird empfohlen, stattdessen std::string zu verwenden.


3. Einführung in die std::string-Klasse

In modernem C++ wird die <string>-Bibliothek für Textverarbeitung verwendet. std::string kann dynamisch wachsen, verwaltet den Speicher automatisch und bietet viele nützliche Funktionen.


#include <iostream>
#include <string>
using namespace std;

int main() {
    string vorname = "Ali";
    string nachname = "Yilmaz";
    string vollerName = vorname + " " + nachname;

    cout << "Hallo " << vollerName << endl;
    return 0;
}

Der Typ std::string kann mit dem Operator + einfach verkettet werden und mit == direkt verglichen werden.


4. Grundlegende String-Operationen

OperationBeschreibungBeispiel
VerkettenVerbindet zwei Stringsa + b
LängeGibt die Zeichenanzahl zurücka.length() oder a.size()
ZeichenzugriffZugriff über Indexa[0], a.at(2)
TeilstringExtrahiert einen Abschnitta.substr(2, 4)
VergleichAlphabetischer Vergleicha.compare(b)
Leer?Prüft, ob der String leer ista.empty()
LöschenLöscht den Inhalta.clear()

string text = "Programmierung";
cout << text.length() << endl;   // 14
cout << text.substr(0, 7) << endl; // "Program"

5. Suchen, Ersetzen und Löschen

std::string bietet viele leistungsstarke Funktionen zur Textverarbeitung:


string nachricht = "C++ Programmiersprache";

// Suchen
size_t position = nachricht.find("Programmier");
if (position != string::npos)
    cout << "'Programmier' gefunden bei Index: " << position << endl;

// Ersetzen
nachricht.replace(4, 11, "modern"); // ersetzt ab Index 4 elf Zeichen
cout << nachricht << endl; // "C++ moderne Sprache"

// Löschen
nachricht.erase(4, 7); // löscht ab Index 4 sieben Zeichen
cout << nachricht << endl; // "C++ Sprache"

Die Methode find() gibt string::npos zurück, wenn der gesuchte Text nicht gefunden wird. Dieser Wert bedeutet „nicht gefunden“.


6. Zeichenweise Operationen

Da ein String aus Zeichen besteht, kann er mit Schleifen Zeichen für Zeichen verarbeitet werden.


#include <iostream>
#include <string>
using namespace std;

int main() {
    string wort = "Cplusplus";

    for (char c : wort) {
        cout << c << " ";
    }

    cout << endl;

    // In Großbuchstaben umwandeln
    for (char &c : wort) {
        c = toupper(c);
    }
    cout << wort << endl;
}

Für die Zeichentransformation können die Funktionen toupper() und tolower() aus der Bibliothek <cctype> verwendet werden.


7. Umwandlungsoperationen (string <→ int, double)

Eine std::string kann in numerische Werte umgewandelt werden und umgekehrt.


#include <iostream>
#include <string>
using namespace std;

int main() {
    string zahlText = "42";
    int zahl = stoi(zahlText); // string → int
    double d = stod("3.14");   // string → double

    cout << zahl + 10 << endl; // 52
    cout << d * 2 << endl;     // 6.28

    // int → string
    int alter = 25;
    string text = to_string(alter);
    cout << "Alter: " << text << endl;
}

8. Vergleich (compare, ==, <, >)

Strings können entweder mit der Methode compare() oder mit Vergleichsoperatoren verglichen werden.


string a = "Ali";
string b = "Veli";

if (a == b)
    cout << "Gleich" << endl;
else if (a < b)
    cout << "A steht alphabetisch davor" << endl;
else
    cout << "A steht alphabetisch danach" << endl;

9. Ein- und Ausgabeoperationen

Das Objekt cin liest Eingaben nur bis zum ersten Leerzeichen. Wenn du eine ganze Zeile einlesen möchtest, verwende die Funktion getline().


#include <iostream>
#include <string>
using namespace std;

int main() {
    string name;
    cout << "Geben Sie Ihren Namen ein: ";
    cin >> name;
    cout << "Hallo, " << name << endl;

    cin.ignore(); // Entfernt das Newline-Zeichen aus dem Eingabepuffer

    string satz;
    cout << "Geben Sie einen Satz ein: ";
    getline(cin, satz);

    cout << "Ihr Satz: " << satz << endl;
}

getline() liest die gesamte Zeile einschließlich der Leerzeichen.


10. Beispielanwendung: Textanalyse

Im folgenden Beispiel wird die Anzahl der Wörter und Buchstaben in einem vom Benutzer eingegebenen Text gezählt.


#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
    string text;
    cout << "Geben Sie einen Satz ein: ";
    getline(cin, text);

    int buchstabenAnzahl = 0;
    int wortAnzahl = 1;

    for (char c : text) {
        if (isalpha(c))
            buchstabenAnzahl++;
        if (c == ' ')
            wortAnzahl++;
    }

    cout << "Buchstabenanzahl: " << buchstabenAnzahl << endl;
    cout << "Wörteranzahl: " << wortAnzahl << endl;
    return 0;
}

11. TL;DR

  • C-Strings sind char[]-Arrays und müssen vorsichtig verwendet werden.
  • In modernem C++ wird die Verwendung der Klasse std::string empfohlen.
  • Grundlegende Operationen: +, length(), substr(), find(), replace(), erase().
  • Für numerische Umwandlungen verwende stoi(), stod() und to_string().
  • getline() kann Texte mit Leerzeichen einlesen.
  • Alle Beispiele können in Visual Studio 2022 oder GCC 11+ ausgeführt werden.

Ähnliche Artikel