Como devo obter o número de caracteres em uma string em C ++?
c++
string
stdstring
string-length
Elliot
fonte
fonte
Respostas:
Se você estiver usando um
std::string
, ligue paralength()
:Se você estiver usando uma string C, chame
strlen()
.Ou, se por acaso você gosta de usar strings no estilo Pascal (ou strings f *****, como Joel Spolsky gosta de chamá-los quando têm um NULL à direita), simplesmente cancele a referência do primeiro caractere.
fonte
std::size_t
.Ao lidar com strings C ++ (std :: string), você está procurando por length () ou size () . Ambos devem fornecer o mesmo valor. No entanto, ao lidar com strings de estilo C, você usaria strlen () .
Resultado:
fonte
Depende de qual tipo de string você está falando. Existem muitos tipos de strings:
const char*
- uma string multibyte de estilo Cconst wchar_t*
- uma corda larga estilo Cstd::string
- uma string multibyte "padrão"std::wstring
- uma corda larga "padrão"Para 3 e 4, você pode usar os métodos
.size()
ou.length()
.Para 1, você pode usar
strlen()
, mas deve garantir que a variável da string não seja NULL (=== 0)Para 2, você pode usar
wcslen()
, mas deve garantir que a variável da string não seja NULL (=== 0)Existem outros tipos de string em bibliotecas C ++ não padrão, como MFCs
CString
, ATLsCComBSTR
, ACEsACE_CString
e assim por diante, com métodos como.GetLength()
e assim por diante. Não consigo me lembrar dos detalhes de todos eles de cara.As bibliotecas STLSoft abstraíram tudo isso com o que chamam de shims de acesso de string , que podem ser usados para obter o comprimento da string (e outros aspectos) de qualquer tipo. Portanto, para todos os itens acima (incluindo os da biblioteca não padrão) usando a mesma função
stlsoft::c_str_len()
. Este artigo descreve como tudo funciona, pois nem tudo é totalmente óbvio ou fácil.fonte
Para Unicode
Várias respostas aqui abordaram isso
.length()
dá resultados errados com caracteres multibyte, mas há 11 respostas e nenhuma delas forneceu uma solução.O caso de Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚
Em primeiro lugar, é importante saber o que você entende por "comprimento". Para um exemplo motivador, considere a string "Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚" (observe que algumas línguas, notadamente o tailandês, realmente usam a combinação de marcas diacríticas, então isso não é útil apenas para memes de 15 anos, mas obviamente é o caso de uso mais importante) . Suponha que ele esteja codificado em UTF-8 . Existem 3 maneiras de falar sobre o comprimento desta string:
95 bytes
50 pontos de código
5 grafemas
Encontrar os comprimentos usando a UTI
Existem classes C ++ para ICU, mas requerem a conversão para UTF-16. Você pode usar os tipos C e macros diretamente para obter algum suporte UTF-8:
Isso imprime:
Boost.Locale envolve ICU e pode fornecer uma interface mais agradável. No entanto, ainda requer conversão de / para UTF-16.
fonte
Se você estiver usando strings antigas no estilo C em vez das strings mais novas no estilo STL, há a
strlen
função na biblioteca de tempo de execução C:fonte
se você estiver usando std :: string, existem dois métodos comuns para isso:
se estiver usando a string de estilo C (usando char * ou const char *), você pode usar:
fonte
.length e .size são sinônimos, só acho que "comprimento" é uma palavra um pouco mais clara.
fonte
fonte
para um objeto string real:
ou
fonte
Em C ++ std :: string, os métodos length () e size () fornecem o número de bytes, e não necessariamente o número de caracteres! Mesmo com a função sizeof () do c-Style!
Para a maioria dos caracteres ASCII de 7 bits imprimíveis, este é o mesmo valor, mas para caracteres que não são ASCII de 7 bits, definitivamente não é. Veja o exemplo a seguir para obter resultados reais (Linux de 64 bits).
Não existe uma função c / c ++ simples que possa realmente contar o número de caracteres. A propósito, tudo isso depende da implementação e pode ser diferente em outros ambientes (compilador, win 16/32, linux, incorporado, ...)
Veja o seguinte exemplo:
O resultado do exemplo é este:
fonte
Pode ser a maneira mais fácil de inserir uma string e encontrar seu comprimento.
fonte
A maneira mais simples de obter o comprimento da string sem se preocupar com o namespace std é a seguinte
string com / sem espaços
string sem espaços
fonte