HOWTO · C++
Encontre o comprimento de uma string em C++
Este artigo demonstra como encontrar o comprimento de uma string em C++. Explore vários métodos, incluindo funções integradas como length() e size(), bem como uma abordagem com um loop personalizado. Aprenda a gerenciar dados de string de forma eficaz nos seus programas C++ com exemplos de código práticos e explicações detalhadas.
Nesta página
Para uma std::string, chame length() ou size() para obter o número de elementos char armazenados. As duas funções-membro retornam a mesma contagem. Por exemplo, a string "Hello, C++!" tem 11 elementos:
#include <iostream>
#include <string>
int main() {
const std::string message = "Hello, C++!";
std::cout << message.length() << '\n';
}
11
Os exemplos abaixo usam cabeçalhos padrão do C++ e funções main independentes. Cada saída mostra a contagem impressa pelo seu exemplo.
Obter o comprimento de uma std::string com length()
Use length() quando quiser perguntar a uma string pela sua contagem de elementos armazenados. Ela retorna o número de elementos char na string. Essa contagem inclui quaisquer elementos nulos incorporados que façam parte do valor armazenado; ela não para no primeiro \0 como faz uma função de string C.
O resultado é uma contagem de elementos char, não necessariamente uma contagem de caracteres percebidos pelo usuário ou de pontos de código Unicode. O texto em UTF-8 pode usar vários elementos char para um único caractere exibido. Use length() para o comprimento armazenado da string e escolha uma operação consciente de Unicode quando a tarefa precisar de contagens de caracteres de texto.
Obter o comprimento de uma std::string com size()
size() retorna o mesmo número que length() para std::string. Escolha qualquer uma das grafias com base na legibilidade ou no código ao redor; não há necessidade de preferir uma pelo desempenho. size() também é comumente usado com contêineres padrão, onde informa o número de elementos.
#include <iostream>
#include <string>
int main() {
const std::string language = "C++ strings";
std::cout << language.size() << '\n';
}
11
Inclua <string> para usar std::string, e <iostream> ao escrever o resultado deste exemplo em std::cout.
Contar elementos de uma std::string com um loop for baseado em intervalo
Um loop for baseado em intervalo pode contar cada elemento em uma string. Isso é útil para aprender como a iteração funciona ou quando cada elemento também precisa de processamento. Para uma consulta de comprimento comum, length() e size() expressam a intenção diretamente.
#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 loop visita cada elemento char armazenado, incluindo um elemento nulo incorporado. std::size_t é o tipo sem sinal padrão usado para tamanhos e índices de contêineres.
Contar uma string terminada em nulo com um loop while
Um loop while manual aplica-se a uma sequência de caracteres terminada em nulo, frequentemente chamada de string C. O loop avança até alcançar o caractere nulo terminador. Seu ponteiro deve se referir a uma sequência válida que contenha um terminador; um ponteiro arbitrário sem essa garantia não pode ser percorrido com segurança dessa maneira.
#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() fornece um ponteiro para uma representação terminada em nulo da string. O loop conta apenas a parte antes do primeiro caractere nulo, portanto pode diferir do comprimento armazenado completo quando a std::string contém um nulo incorporado.
Usar std::strlen com uma string terminada em nulo
A função da biblioteca C std::strlen é outra opção quando a entrada já é uma string de bytes válida terminada em nulo. Inclua <cstring> para a sua declaração. Ela conta os bytes antes do primeiro caractere nulo, portanto não é um substituto de length() quando você precisa do comprimento armazenado completo de uma std::string que pode conter elementos nulos incorporados.
#include <cstring>
#include <iostream>
#include <string>
int main() {
const std::string value = "C++ strings";
std::cout << std::strlen(value.c_str()) << '\n';
}
11
O resultado de c_str() de uma std::string é terminado em nulo. Para um const char* independente, std::strlen exige que o ponteiro se refira a uma sequência válida terminada em nulo; caso contrário, sua varredura pode ler além do armazenamento disponível.
Escolher o método certo de comprimento de string
Para uma std::string, use length() ou size() para obter a sua contagem armazenada de elementos char. Eles são equivalentes, e <string> declara o tipo string. Use um loop baseado em intervalo quando estiver ensinando ou processando os elementos enquanto os conta.
Para uma string C, use std::strlen quando a entrada for válida e terminada em nulo, ou use um loop while para ilustrar o percurso. Ambos param no primeiro caractere nulo. Os métodos de std::string contam os elementos armazenados, incluindo nulos incorporados; nenhuma dessas contagens deve ser confundida com uma contagem geral de caracteres Unicode.