Comment obtenir le nombre de caractères d'une chaîne en C ++?
c++
string
stdstring
string-length
Elliot
la source
la source
Réponses:
Si vous utilisez un
std::string
, appelezlength()
:Si vous utilisez une chaîne C, appelez
strlen()
.Ou, si vous aimez utiliser des chaînes de style Pascal (ou des chaînes f ***** comme Joel Spolsky aime les appeler quand elles ont un NULL à la fin), déréférencer simplement le premier caractère.
la source
std::size_t
.Lorsque vous traitez avec des chaînes C ++ (std :: string), vous recherchez length () ou size () . Les deux devraient vous fournir la même valeur. Cependant, lorsque vous traitez avec des chaînes de style C, vous utiliserez strlen () .
Production:
la source
Cela dépend du type de chaîne dont vous parlez. Il existe de nombreux types de chaînes:
const char*
- une chaîne multi-octets de style Cconst wchar_t*
- une corde large de style Cstd::string
- une chaîne multi-octets "standard"std::wstring
- une chaîne large "standard"Pour 3 et 4, vous pouvez utiliser les méthodes
.size()
ou.length()
.Pour 1, vous pouvez utiliser
strlen()
, mais vous devez vous assurer que la variable chaîne n'est pas NULL (=== 0)Pour 2, vous pouvez utiliser
wcslen()
, mais vous devez vous assurer que la variable chaîne n'est pas NULL (=== 0)Il existe d'autres types de chaîne dans les bibliothèques C ++ non standard, telles que MFC
CString
, ATLCComBSTR
, ACEACE_CString
, etc., avec des méthodes telles que.GetLength()
, etc. Je ne me souviens pas de leurs détails tout de suite du haut de ma tête.Les bibliothèques STLSoft ont résumé tout cela avec ce qu'elles appellent des shims d'accès aux chaînes , qui peuvent être utilisés pour obtenir la longueur de la chaîne (et d'autres aspects) de n'importe quel type. Donc, pour tout ce qui précède (y compris les bibliothèques non standard) en utilisant la même fonction
stlsoft::c_str_len()
. Cet article décrit comment tout cela fonctionne, car ce n'est pas tout à fait évident ou facile.la source
Pour Unicode
Plusieurs réponses ici ont abordé ce qui
.length()
donne de mauvais résultats avec des caractères multi-octets, mais il y a 11 réponses et aucune d'entre elles n'a fourni de solution.Le cas de Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚
Tout d'abord, il est important de savoir ce que vous entendez par «longueur». Pour un exemple motivant, considérons la chaîne "Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚" (notez que certaines langues, notamment le thaï, utilisent en fait la combinaison de signes diacritiques, donc ce n'est pas seulement utile pour les mèmes de 15 ans, mais c'est évidemment le cas d'utilisation le plus important) . Supposons qu'il soit encodé en UTF-8 . Il y a 3 façons de parler de la longueur de cette chaîne:
95 octets
50 points de code
5 graphèmes
Trouver les longueurs en utilisant ICU
Il existe des classes C ++ pour ICU, mais elles nécessitent une conversion en UTF-16. Vous pouvez utiliser les types C et les macros directement pour obtenir un support UTF-8:
Cela imprime:
Boost.Locale encapsule ICU et pourrait fournir une interface plus agréable. Cependant, il nécessite toujours une conversion vers / depuis UTF-16.
la source
Si vous utilisez une ancienne chaîne de style C au lieu des nouvelles chaînes de style STL, il y a la
strlen
fonction dans la bibliothèque d'exécution C:la source
si vous utilisez std :: string, il existe deux méthodes courantes pour cela:
si vous utilisez la chaîne de style C (en utilisant char * ou const char *), vous pouvez utiliser:
la source
.length et .size sont synonymes, je pense simplement que "longueur" est un mot un peu plus clair.
la source
la source
pour un objet string réel:
ou
la source
En C ++ std :: string, la méthode length () et size () vous donne le nombre d'octets, et pas nécessairement le nombre de caractères!. Idem avec la fonction sizeof () de c-Style!
Pour la plupart des caractères ASCII 7 bits imprimables, il s'agit de la même valeur, mais ce n'est certainement pas le cas pour les caractères qui ne sont pas ASCII 7 bits. Voir l'exemple suivant pour vous donner de vrais résultats (Linux 64 bits).
Il n'y a pas de fonction c / c ++ simple qui puisse vraiment compter le nombre de caractères. En passant, tout cela dépend de l'implémentation et peut être différent sur d'autres environnements (compilateur, win 16/32, linux, embarqué, ...)
Voir l'exemple suivant:
La sortie de l'exemple est la suivante:
la source
Cela peut être le moyen le plus simple de saisir une chaîne et de trouver sa longueur.
la source
Le moyen le plus simple d'obtenir la longueur d'une chaîne sans se soucier de l'espace de noms std est le suivant
chaîne avec / sans espaces
chaîne sans espaces
la source