¿Cómo debo obtener la cantidad de caracteres en una cadena en C ++?
c++
string
stdstring
string-length
Elliot
fuente
fuente
Respuestas:
Si está usando un
std::string
, llame alength()
:Si está usando una c-string, llame
strlen()
.O, si le gusta usar cadenas de estilo Pascal (o cadenas de mierda como a Joel Spolsky le gusta llamarlas cuando tienen un NULL al final), simplemente elimine la referencia al primer carácter.
fuente
std::size_t
.Cuando se trata de cadenas de C ++ (std :: string), busca length () o size () . Ambos deberían proporcionarle el mismo valor. Sin embargo, cuando se trata de cadenas de estilo C, debería utilizar strlen () .
Salida:
fuente
Depende del tipo de cadena del que estés hablando. Hay muchos tipos de cadenas:
const char*
- una cadena multibyte estilo Cconst wchar_t*
- una cuerda ancha de estilo Cstd::string
- una cadena multibyte "estándar"std::wstring
- una cuerda ancha "estándar"Para 3 y 4, puede usar los métodos
.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 de C ++ no estándar, como MFC
CString
, ATLCComBSTR
, ACEACE_CString
, etc., con métodos como.GetLength()
, etc. No puedo recordar los detalles de todos ellos de la parte superior de mi cabeza.El STLSoft bibliotecas de han resumido todo esto con lo que llaman shims de acceso a cadenas , que se pueden usar para obtener la longitud de la cadena (y otros aspectos) de cualquier tipo. Entonces, para todo lo anterior (incluidas las bibliotecas no estándar), use la misma función
stlsoft::c_str_len()
. Este artículo describe cómo funciona todo, ya que no es del todo obvio o fácil.fuente
Para Unicode
Varias respuestas aquí han abordado que
.length()
dan resultados incorrectos con caracteres multibyte, pero hay 11 respuestas y ninguna de ellas ha proporcionado una solución.El caso de Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚
En primer lugar, es importante saber a qué te refieres con "longitud". Para un ejemplo motivador, considere la cadena "Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚" (tenga en cuenta que algunos idiomas, especialmente el tailandés, en realidad usan signos diacríticos combinados, por lo que esto no solo es útil para los memes de 15 años, pero obviamente ese es el caso de uso más importante) . Suponga que está codificado en UTF-8 . Hay 3 formas en las que podemos hablar sobre la longitud de esta cadena:
95 bytes
50 puntos de código
5 grafemas
Encontrar las longitudes usando UCI
Hay clases C ++ para ICU, pero requieren conversión a UTF-16. Puede utilizar los tipos de C y las macros directamente para obtener compatibilidad con UTF-8:
Esto imprime:
Boost.Locale envuelve ICU y podría proporcionar una interfaz más agradable. Sin embargo, aún requiere conversión a / desde UTF-16.
fuente
Si está utilizando cadenas antiguas de estilo C en lugar de las cadenas de estilo STL más nuevas, existe la
strlen
función en la biblioteca de tiempo de ejecución de C:fuente
si está usando std :: string, hay dos métodos comunes para eso:
si está usando la cadena de estilo C (usando char * o const char *) entonces puede usar:
fuente
.length y .size son sinónimos, creo que "length" es una palabra un poco más clara.
fuente
fuente
para un objeto de cadena real:
o
fuente
En C ++ std :: string, el método length () y size () le da el número de bytes, y no necesariamente el número de caracteres. ¡Lo mismo con la función de tamaño de estilo c ()!
Para la mayoría de los caracteres ASCII de 7 bits imprimibles, este es el mismo valor, pero para los caracteres que no son ASCII de 7 bits definitivamente no lo es. Vea el siguiente ejemplo para obtener resultados reales (Linux de 64 bits).
No existe una función simple de c / c ++ 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 (compilador, win 16/32, linux, embedded, ...)
Vea el siguiente ejemplo:
El resultado del ejemplo es este:
fuente
Podría ser la forma más fácil de ingresar una cadena y encontrar su longitud.
fuente
La forma más sencilla de obtener la longitud de la cadena sin preocuparse por el espacio de nombres estándar es la siguiente
cadena con / sin espacios
cadena sin espacios
fuente