HOWTO · C++

Länge einer Zeichenkette in C++ finden

Dieser Artikel zeigt, wie man die Länge einer Zeichenkette in C++ ermittelt. Er stellt verschiedene Methoden vor, darunter eingebaute Funktionen wie length() und size() sowie einen Ansatz mit einer eigenen Schleife. Lernen Sie anhand praktischer Codebeispiele und ausführlicher Erklärungen, wie Sie Zeichenketten-Daten in Ihren C++-Programmen effektiv verwalten.

Auf dieser Seite

Rufen Sie für eine std::string length() oder size() auf, um die Anzahl der gespeicherten char-Elemente zu erhalten. Die beiden Mitgliedsfunktionen geben denselben Zählwert zurück. Zum Beispiel hat die Zeichenkette "Hello, C++!" 11 Elemente:

#include <iostream>
#include <string>

int main() {
    const std::string message = "Hello, C++!";
    std::cout << message.length() << '\n';
}
11

Die folgenden Beispiele verwenden Standard-C++-Header und eigenständige main-Funktionen. Jede Ausgabe zeigt den von ihrem Beispiel ausgegebenen Zählwert.

Die Länge einer std::string mit length() ermitteln

Verwenden Sie length(), wenn Sie eine Zeichenkette nach ihrer gespeicherten Elementanzahl fragen möchten. Es gibt die Anzahl der char-Elemente in der Zeichenkette zurück. Dieser Zählwert umfasst alle eingebetteten Nullelemente, die Teil des gespeicherten Werts sind; er stoppt nicht am ersten \0, wie es eine C-String-Funktion tut.

Das Ergebnis ist ein Zählwert von char-Elementen, nicht unbedingt eine Anzahl von Zeichen, wie sie der Benutzer wahrnimmt, oder von Unicode-Codepunkten. UTF-8-Text kann für ein angezeigtes Zeichen mehrere char-Elemente verwenden. Verwenden Sie length() für die gespeicherte Länge der Zeichenkette und wählen Sie eine Unicode-bewusste Operation, wenn die Aufgabe Zeichenzählungen im Text benötigt.

Die Länge einer std::string mit size() ermitteln

size() gibt für std::string dieselbe Zahl zurück wie length(). Wählen Sie eine der beiden Schreibweisen je nach Lesbarkeit oder umgebendem Code; aus Leistungsgründen muss keine bevorzugt werden. size() wird auch häufig bei Standardcontainern verwendet, wo es die Anzahl der Elemente angibt.

#include <iostream>
#include <string>

int main() {
    const std::string language = "C++ strings";
    std::cout << language.size() << '\n';
}
11

Fügen Sie <string> ein, um std::string zu verwenden, und <iostream>, wenn Sie das Ergebnis dieses Beispiels nach std::cout schreiben.

Elemente einer std::string mit einer bereichsbasierten for-Schleife zählen

Eine bereichsbasierte for-Schleife kann jedes Element in einer Zeichenkette zählen. Das ist nützlich, um zu lernen, wie Iteration funktioniert, oder wenn jedes Element auch verarbeitet werden muss. Für eine gewöhnliche Längenabfrage drücken length() und size() die Absicht direkt aus.

#include <cstddef>
#include <iostream>
#include <string>

std::size_t countElements(const std::string& value) {
    std::size_t count = 0;
    for (char element : value) {
        ++count;
    }
    return count;
}

int main() {
    const std::string value = "count me";
    std::cout << countElements(value) << '\n';
}
8

Diese Schleife besucht jedes gespeicherte char-Element, einschließlich eines eingebetteten Nullelements. std::size_t ist der vorzeichenlose Standardtyp, der für Containergrößen und Indizes verwendet wird.

Eine nullterminierte Zeichenkette mit einer while-Schleife zählen

Eine manuelle while-Schleife gilt für eine nullterminierte Zeichenfolge, die oft als C-String bezeichnet wird. Die Schleife rückt vor, bis sie das abschließende Nullzeichen erreicht. Ihr Zeiger muss auf eine gültige Folge verweisen, die einen Terminator enthält; ein beliebiger Zeiger ohne diese Garantie kann auf diese Weise nicht sicher durchlaufen werden.

#include <cstddef>
#include <iostream>
#include <string>

std::size_t countUntilNull(const char* text) {
    std::size_t count = 0;
    while (text[count] != '\0') {
        ++count;
    }
    return count;
}

int main() {
    const std::string value = "C++ strings";
    std::cout << countUntilNull(value.c_str()) << '\n';
}
11

c_str() liefert einen Zeiger auf eine nullterminierte Darstellung der Zeichenkette. Die Schleife zählt nur den Teil vor dem ersten Nullzeichen, daher kann sie sich von der vollständigen gespeicherten Länge unterscheiden, wenn die std::string ein eingebettetes Nullelement enthält.

std::strlen mit einer nullterminierten Zeichenkette verwenden

Die C-Bibliotheksfunktion std::strlen ist eine weitere Option, wenn die Eingabe bereits eine gültige nullterminierte Byte-Zeichenkette ist. Fügen Sie <cstring> für ihre Deklaration ein. Sie zählt Bytes vor dem ersten Nullzeichen und ist daher kein Ersatz für length(), wenn Sie die vollständige gespeicherte Länge einer std::string benötigen, die eingebettete Nullelemente enthalten kann.

#include <cstring>
#include <iostream>
#include <string>

int main() {
    const std::string value = "C++ strings";
    std::cout << std::strlen(value.c_str()) << '\n';
}
11

Das Ergebnis von c_str() einer std::string ist nullterminiert. Für einen eigenständigen const char* verlangt std::strlen, dass der Zeiger auf eine gültige nullterminierte Folge verweist; andernfalls kann sein Scan über den verfügbaren Speicher hinaus lesen.

Die richtige Methode für die Zeichenkettenlänge wählen

Verwenden Sie für eine std::string length() oder size(), um ihre gespeicherte Anzahl von char-Elementen zu erhalten. Sie sind äquivalent, und <string> deklariert den Zeichenkettentyp. Verwenden Sie eine bereichsbasierte Schleife, wenn Sie lehren oder Elemente während des Zählens verarbeiten.

Verwenden Sie für einen C-String std::strlen, wenn die Eingabe gültig und nullterminiert ist, oder eine while-Schleife, um den Durchlauf zu veranschaulichen. Beide stoppen am ersten Nullzeichen. Die Methoden von std::string zählen gespeicherte Elemente, einschließlich eingebetteter Nullelemente; keiner dieser Zählwerte sollte mit einer allgemeinen Zählung von Unicode-Zeichen verwechselt werden.