HOWTO · C++

Encontrar la longitud de una cadena en C++

Este artículo muestra cómo encontrar la longitud de una cadena en C++. Explora varios métodos, incluidas funciones integradas como length() y size(), así como un enfoque con un bucle personalizado. Aprende a gestionar eficazmente los datos de cadenas en tus programas de C++ con ejemplos de código prácticos y explicaciones detalladas.

En esta página

Para una std::string, llama a length() o size() para obtener el número de elementos char almacenados. Las dos funciones miembro devuelven el mismo conteo. Por ejemplo, la cadena "Hello, C++!" tiene 11 elementos:

#include <iostream>
#include <string>

int main() {
    const std::string message = "Hello, C++!";
    std::cout << message.length() << '\n';
}
11

Los ejemplos siguientes utilizan encabezados estándar de C++ y funciones main independientes. Cada salida muestra el conteo impreso por su ejemplo.

Obtener la longitud de una std::string con length()

Usa length() cuando quieras preguntar a una cadena por su conteo de elementos almacenados. Devuelve el número de elementos char en la cadena. Ese conteo incluye cualquier elemento nulo incrustado que forme parte del valor almacenado; no se detiene en el primer \0 como hace una función de cadenas de C.

El resultado es un conteo de elementos char, no necesariamente un conteo de caracteres percibidos por el usuario ni de puntos de código Unicode. El texto en UTF-8 puede usar varios elementos char para un solo carácter mostrado. Usa length() para la longitud almacenada de la cadena, y elige una operación consciente de Unicode cuando la tarea necesite conteos de caracteres de texto.

Obtener la longitud de una std::string con size()

size() devuelve el mismo número que length() para std::string. Elige cualquiera de las dos grafías según la legibilidad o el código circundante; no es necesario preferir una por rendimiento. size() también se usa comúnmente con los contenedores estándar, donde informa del número de elementos.

#include <iostream>
#include <string>

int main() {
    const std::string language = "C++ strings";
    std::cout << language.size() << '\n';
}
11

Incluye <string> para usar std::string, y <iostream> cuando escribas el resultado de este ejemplo en std::cout.

Contar los elementos de una std::string con un bucle for basado en rangos

Un bucle for basado en rangos puede contar cada elemento de una cadena. Esto es útil para aprender cómo funciona la iteración o cuando cada elemento también necesita procesamiento. Para una consulta de longitud ordinaria, length() y size() expresan la intención directamente.

#include <cstddef>
#include <iostream>
#include <string>

std::size_t countElements(const std::string& value) {
    std::size_t count = 0;
    for (char element : value) {
        ++count;
    }
    return count;
}

int main() {
    const std::string value = "count me";
    std::cout << countElements(value) << '\n';
}
8

Este bucle visita cada elemento char almacenado, incluido un elemento nulo incrustado. std::size_t es el tipo sin signo estándar usado para tamaños e índices de contenedores.

Contar una cadena terminada en nulo con un bucle while

Un bucle while manual se aplica a una secuencia de caracteres terminada en nulo, a menudo llamada cadena de C. El bucle avanza hasta llegar al carácter nulo terminador. Su puntero debe referirse a una secuencia válida que contenga un terminador; un puntero arbitrario sin esa garantía no puede recorrerse de forma segura de esta manera.

#include <cstddef>
#include <iostream>
#include <string>

std::size_t countUntilNull(const char* text) {
    std::size_t count = 0;
    while (text[count] != '\0') {
        ++count;
    }
    return count;
}

int main() {
    const std::string value = "C++ strings";
    std::cout << countUntilNull(value.c_str()) << '\n';
}
11

c_str() proporciona un puntero a una representación terminada en nulo de la cadena. El bucle cuenta solo la parte anterior al primer carácter nulo, por lo que puede diferir de la longitud almacenada completa cuando la std::string contiene un nulo incrustado.

Usar std::strlen con una cadena terminada en nulo

La función de la biblioteca de C std::strlen es otra opción cuando la entrada ya es una cadena de bytes válida terminada en nulo. Incluye <cstring> para su declaración. Cuenta los bytes anteriores al primer carácter nulo, por lo que no es un reemplazo de length() cuando necesitas la longitud almacenada completa de una std::string que puede contener elementos nulos incrustados.

#include <cstring>
#include <iostream>
#include <string>

int main() {
    const std::string value = "C++ strings";
    std::cout << std::strlen(value.c_str()) << '\n';
}
11

El resultado de c_str() de una std::string está terminado en nulo. Para un const char* independiente, std::strlen requiere que el puntero se refiera a una secuencia válida terminada en nulo; de lo contrario, su exploración puede leer más allá del almacenamiento disponible.

Elegir el método correcto para la longitud de una cadena

Para una std::string, usa length() o size() para obtener su conteo almacenado de elementos char. Son equivalentes, y <string> declara el tipo de cadena. Usa un bucle basado en rangos cuando enseñes o proceses los elementos mientras los cuentas.

Para una cadena de C, usa std::strlen cuando la entrada sea válida y esté terminada en nulo, o usa un bucle while para ilustrar el recorrido. Ambos se detienen en el primer carácter nulo. Los métodos de std::string cuentan los elementos almacenados, incluidos los nulos incrustados; ninguno de estos conteos debe confundirse con un conteo general de caracteres Unicode.