Wie soll ich die Anzahl der Zeichen in einer Zeichenfolge in C ++ ermitteln?
c++
string
stdstring
string-length
Elliot
quelle
quelle
Antworten:
Wenn Sie a verwenden
std::string
, rufen Sie anlength()
:Wenn Sie einen C-String verwenden, rufen Sie auf
strlen()
.Oder wenn Sie zufällig Zeichenfolgen im Pascal-Stil verwenden (oder Zeichenfolgen, wie Joel Spolsky sie gerne nennt, wenn sie ein nachfolgendes NULL haben), dereferenzieren Sie einfach das erste Zeichen.
quelle
std::size_t
.Wenn Sie mit C ++ - Zeichenfolgen (std :: string) arbeiten, suchen Sie nach Länge () oder Größe () . Beide sollten Ihnen den gleichen Wert liefern. Wenn Sie jedoch mit C-Style-Zeichenfolgen arbeiten, würden Sie strlen () verwenden .
Ausgabe:
quelle
Dies hängt davon ab, über welchen Zeichenfolgentyp Sie sprechen. Es gibt viele Arten von Zeichenfolgen:
const char*
- eine Multibyte-Zeichenfolge im C-Stilconst wchar_t*
- eine breite Saite im C-Stilstd::string
- eine "Standard" -Multibyte-Zeichenfolgestd::wstring
- eine "Standard" breite SaiteFür 3 und 4 können Sie
.size()
oder.length()
Methoden verwenden.Für 1 können Sie verwenden
strlen()
, aber Sie müssen sicherstellen, dass die Zeichenfolgenvariable nicht NULL ist (=== 0).Für 2 können Sie verwenden
wcslen()
, aber Sie müssen sicherstellen, dass die Zeichenfolgenvariable nicht NULL ist (=== 0).Es gibt andere Zeichenfolgentypen in nicht standardmäßigen C ++ - Bibliotheken wie MFCs
CString
, ATLsCComBSTR
, ACEsACE_CString
usw. mit Methoden wie.GetLength()
usw. Ich kann mich nicht genau an die Besonderheiten erinnern.Die STLSoft- Bibliotheken haben dies alles mit sogenannten String-Access-Shims abstrahiert, mit denen die String-Länge (und andere Aspekte) von jedem Typ abgerufen werden kann. Also für alle oben genannten (einschließlich der nicht standardmäßigen Bibliothek), die dieselbe Funktion verwenden
stlsoft::c_str_len()
. Dieser Artikel beschreibt, wie alles funktioniert, da es nicht ganz offensichtlich oder einfach ist.quelle
Wenn Sie anstelle der neueren Zeichenfolgen im STL-Stil alte Zeichenfolgen
strlen
im C -Stil verwenden, gibt es die folgende Funktion in der C-Laufzeitbibliothek:quelle
Wenn Sie std :: string verwenden, gibt es dafür zwei gängige Methoden:
Wenn Sie die Zeichenfolge im C-Stil verwenden (mit char * oder const char *), können Sie Folgendes verwenden:
quelle
Für Unicode
Es wurden mehrere Antworten angesprochen,
.length()
die mit Multibyte-Zeichen zu falschen Ergebnissen führen. Es gibt jedoch 11 Antworten, von denen keine eine Lösung bietet.Der Fall von Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚
Zunächst ist es wichtig zu wissen, was Sie unter "Länge" verstehen. Betrachten Sie als motivierendes Beispiel die Zeichenfolge "Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚" (beachten Sie, dass einige Sprachen, insbesondere Thai, tatsächlich kombinierte diakritische Zeichen verwenden, sodass dies nicht nur für 15 Jahre alte Meme nützlich ist, sondern offensichtlich der wichtigste Anwendungsfall ist). . Angenommen, es ist in UTF-8 codiert . Es gibt drei Möglichkeiten, wie wir über die Länge dieser Zeichenfolge sprechen können:
95 Bytes
50 Codepunkte
5 Grapheme
Ermitteln der Längen auf der Intensivstation
Es gibt C ++ - Klassen für die Intensivstation, die jedoch eine Konvertierung in UTF-16 erfordern. Sie können die C-Typen und Makros direkt verwenden, um UTF-8-Unterstützung zu erhalten:
Dies druckt:
Boost.Locale umschließt die Intensivstation und bietet möglicherweise eine schönere Benutzeroberfläche. Es ist jedoch weiterhin eine Konvertierung zu / von UTF-16 erforderlich.
quelle
.length und .size sind synonym, ich denke nur, dass "length" ein etwas klareres Wort ist.
quelle
quelle
für ein tatsächliches String-Objekt:
oder
quelle
In C ++ std :: string geben die Methoden length () und size () die Anzahl der Bytes und nicht unbedingt die Anzahl der Zeichen an! Gleiches gilt für die Funktion c-Style sizeof ()!
Für die meisten druckbaren 7-Bit-ASCII-Zeichen ist dies der gleiche Wert, für Zeichen, die nicht 7-Bit-ASCII sind, jedoch definitiv nicht. Sehen Sie sich das folgende Beispiel an, um echte Ergebnisse zu erzielen (64-Bit-Linux).
Es gibt keine einfache c / c ++ - Funktion, die die Anzahl der Zeichen wirklich zählen kann. Übrigens ist all dieses Zeug implementierungsabhängig und kann in anderen Umgebungen unterschiedlich sein (Compiler, Win 16/32, Linux, Embedded, ...).
Siehe folgendes Beispiel:
Die Ausgabe des Beispiels lautet wie folgt:
quelle
Dies ist möglicherweise der einfachste Weg, eine Zeichenfolge einzugeben und ihre Länge zu ermitteln.
quelle
Der einfachste Weg, die Länge eines Strings zu ermitteln, ohne sich um den Standard-Namespace zu kümmern, ist der folgende
Zeichenfolge mit / ohne Leerzeichen
Zeichenfolge ohne Leerzeichen
quelle