¿Cómo obtener la cantidad de caracteres en std :: string?

¿Cómo debo obtener la cantidad de caracteres en una cadena en C ++?

Si está usando std::string , call length() :

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

Si está utilizando una cadena de caracteres, llame a strlen() .

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

O, si le gusta usar cadenas de estilo Pascal (o f ***** cadenas como a Joel Spolsky le gusta llamarlas cuando tienen un NULL final), simplemente desreferencia al primer carácter.

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

Al tratar con cadenas de C ++ (std :: string), está buscando length () o size () . Ambos deberían proporcionarle el mismo valor. Sin embargo, cuando se trata de cadenas C-Style, debe usar strlen () .

 #include  #include  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; } 

Salida:

 6 6 6 6 

Depende de qué tipo de cadena estés hablando. Hay muchos tipos de cadenas:

  1. const char* – una cadena multibyte estilo C
  2. const wchar_t* – una cadena ancha estilo C
  3. std::string – una cadena multibyte “estándar”
  4. std::wstring – una cadena ancha “estándar”

Para 3 y 4, puede usar los .size() o .length() .

Para 1, puede usar strlen() , pero debe asegurarse de que la variable de cadena no sea NULL (=== 0)

Para 2, puede usar wcslen() , pero debe asegurarse de que la variable de cadena no sea NULL (=== 0)

Hay otros tipos de cadenas en bibliotecas C ++ no estándar, como CString de MFC, CComBSTR de ATL, CComBSTR ACE, etc., con métodos como .GetLength() , y así sucesivamente. No puedo recordar los detalles de todos ellos directamente de mi cabeza.

Las bibliotecas de STLSoft han abstraído todo esto con lo que llaman calzas de acceso a cuerdas , que se pueden usar para obtener la longitud de la cuerda (y otros aspectos) de cualquier tipo. Por lo tanto, para todo lo anterior (incluidos los de la biblioteca no estándar) utilizando la misma función que stlsoft::c_str_len() . Este artículo describe cómo funciona todo, ya que no es del todo obvio o fácil.

Si está utilizando cadena antigua tipo C en lugar de las cadenas más recientes estilo STL, existe la función strlen en la biblioteca de tiempo de ejecución C:

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

si está usando std :: string, hay dos métodos comunes para eso:

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

si está utilizando la cadena de estilo C (usando char * o const char *), puede usar:

 const char *pStr = "Some String"; size_t Size = strlen(pStr); 
 string foo; ... foo.length() ... 

.length y .size son sinónimos, solo creo que “length” es una palabra ligeramente más clara.

 std::string str("a string"); std::cout << str.size() << std::endl; 

para un objeto de cadena real:

 yourstring.length(); 

o

 yourstring.size(); 

Podría ser la forma más fácil de ingresar una cadena y encontrar su longitud.

 // Finding length of a string in C++ #include #include using namespace std; int count(string); int main() { string str; cout << "Enter a string: "; getline(cin,str); cout << "\nString: " << str << endl; cout << count(str) << endl; return 0; } int count(string s){ if(s == "") return 0; if(s.length() == 1) return 1; else return (s.length()); } 

La forma más sencilla de obtener la longitud de la cadena sin molestar por el espacio de nombres estándar es la siguiente

cuerda con / sin espacios

 #include  #include  using namespace std; int main(){ string str; getline(cin,str); cout<<"Length of given string is"< 

cadena sin espacios

 #include  #include  using namespace std; int main(){ string str; cin>>str; cout<<"Length of given string is"< 

En C ++ std :: string, el método length () y size () te da el número de bytes, ¡ y no necesariamente el número de caracteres! ¡Lo mismo con la función c-Style sizeof ()!

Para la mayoría de los caracteres imprimibles de 7 bits ASCII, este es el mismo valor, pero para los caracteres que no son 7bit-ASCII definitivamente no lo es. Consulte el siguiente ejemplo para obtener resultados reales (64 bits de Linux).

No hay una función c / c ++ simple que realmente pueda contar el número de caracteres. Por cierto, todo esto depende de la implementación y puede ser diferente en otros entornos (comstackdor, win 16/32, linux, embedded, …)

Ver el siguiente ejemplo:

 #include  #include  #include  #include  using namespace std; int main() { /* c-Style char Array */ const char * Test1 = "1234"; const char * Test2 = "ÄÖÜ€"; const char * Test3 = "αβγ𝄞"; /* c++ string object */ string sTest1 = "1234"; string sTest2 = "ÄÖÜ€"; string sTest3 = "αβγ𝄞"; printf("\r\nC Style Resluts:\r\n"); printf("Test1: %s, strlen(): %d\r\n",Test1, (int) strlen(Test1)); printf("Test2: %s, strlen(): %d\r\n",Test2, (int) strlen(Test2)); printf("Test3: %s, strlen(): %d\r\n",Test3, (int) strlen(Test3)); printf("\r\nC++ Style Resluts:\r\n"); cout << "Test1: " << sTest1 << ", Test1.size(): " < 

El resultado del ejemplo es este:

 C Style Results: Test1: ABCD, strlen(): 4 Test2: ÄÖÜ€, strlen(): 9 Test3: αβγ𝄞, strlen(): 10 C++ Style Results: Test1: ABCD, sTest1.size(): 4 sTest1.length(): 4 Test2: ÄÖÜ€, sTest2.size(): 9 sTest2.length(): 9 Test3: αβγ𝄞, sTest3.size(): 10 sTest3.length(): 10