Comment dois-je obtenir le nombre de caractères d'une chaîne en C ++?
Réponses
Trop de publicités?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"
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
Cela dépend de quel type de chaîne que vous êtes en train de parler. Il existe de nombreux types de chaînes:
-
const char*
- un C-style chaîne multi-octets -
const wchar_t*
- un style C à l'échelle de la chaîne -
std::string
- un "standard" de la chaîne multi-octets -
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.
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);