121 votes

Longueur de la chaîne

Comment dois-je obtenir le nombre de caractères d'une chaîne en C ++?

184voto

Eclipse Points 27662

Si vous utilisez un std::string, appelez - length():

std::string str = "hello";
std::cout << str << ":" str.length();
// Outputs "hello:5"

Si vous utilisez un c-string, appel strlen().

const char *str = "hello";
std::cout << str << ":" << strlen(str);
// Outputs "hello:5"

Ou, si vous aimez à l'aide de Pascal style des chaînes (ou f***ed les chaînes de caractères comme Joel Spolsky aime à les appeler quand ils ont un NULL de fin), il suffit de déréférencer le premier caractère.

const char *str = "\005hello";
std::cout << str + 1 << ":" << *str;
// Outputs "hello:5"

23voto

John T Points 14067

Lorsque vous utilisez des chaînes C ++ (std :: string), vous recherchez length () ou size () . Les deux devraient vous fournir la même valeur. Cependant, lorsque vous utilisez des chaînes de style C, vous devez utiliser strlen () .

 #include <iostream>
#include <string.h>

int main(int argc, char **argv)
{
   std::string str = "Hello!";
   const char *otherstr = "Hello!"; // C-Style string
   std::cout << str.size() << std::endl;
   std::cout << str.length() << std::endl;
   std::cout << strlen(otherstr) << std::endl; // C way for string length
   std::cout << strlen(str.c_str()) << std::endl; // convert C++ string to C-string then call strlen
   return 0;
}
 

Sortie:

 6
6
6
6
 

17voto

dcw Points 2181

Cela dépend de quel type de chaîne que vous êtes en train de parler. Il existe de nombreux types de chaînes:

  1. const char* - un C-style chaîne multi-octets
  2. const wchar_t* - un style C à l'échelle de la chaîne
  3. std::string - un "standard" de la chaîne multi-octets
  4. std::wstring - un "standard" de la grande chaîne

Pour le 3 et le 4, vous pouvez utiliser .size() ou .length() méthodes.

Pour 1, vous pouvez utiliser strlen(), mais vous devez vous assurer que la chaîne de la variable n'est pas NULLE (=== 0)

Pour 2, vous pouvez utiliser wcslen(), mais vous devez vous assurer que la chaîne de la variable n'est pas NULLE (=== 0)

Il existe d'autres types de chaînes non-standard C++ bibliothèques, tels que le MFC CString, ATL CComBSTR, ACE ACE_CString, et ainsi de suite, avec des méthodes telles que .GetLength(), et ainsi de suite. Je ne me souviens pas des détails de tous les droits sur le dessus de ma tête.

Le STLSoft les bibliothèques ont une abstraction de tout cela avec ce qu'ils appellent la chaîne de l'accès des cales, qui peut être utilisé pour obtenir la longueur de la chaîne (et d'autres aspects) à partir de n'importe quel type. Donc, pour tous les ci-dessus (y compris la non-standard de la bibliothèque) à l'aide de la même fonction stlsoft::c_str_len(). Cet article explique comment tout cela fonctionne, car il n'est pas entièrement évident ou facile.

3voto

ChrisW Points 37322

Si vous utilisez une ancienne chaîne de style C au lieu des nouvelles chaînes de style STL, il existe la fonction strlen dans la bibliothèque d'exécution C:

 const char* p = "Hello";
size_t n = strlen(p);
 

3voto

Gal Goldman Points 2563

si vous utilisez std :: string, il existe deux méthodes courantes pour cela:

 std::string Str("Some String");
size_t Size = 0;
Size = Str.size();
Size = Str.length();
 

Si vous utilisez la chaîne de style C (en utilisant char * ou const char *), vous pouvez utiliser:

 const char *pStr = "Some String";
size_t Size = strlen(pStr);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X