Como posso converter uma string de maiúsculas e minúsculas em uma string de letras minúsculas em C?
strlwr((char*)str);
Ele simplesmente passa pela string e se converte.
Como posso converter uma string de maiúsculas e minúsculas em uma string de letras minúsculas em C?
strlwr((char*)str);
Ele simplesmente passa pela string e se converte.
Respostas:
Está na biblioteca padrão, e essa é a maneira mais direta que posso ver para implementar essa função. Então, sim, apenas percorra a string e converta cada caractere em minúsculas.
Algo trivial como isto:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
ou se você preferir um forro, pode usar este de JF Sebastian:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
parece mais idiomático.
char *
, mas não se str for uma matriz char. Tem alguma explicação para isso?
converter para minúsculas é equivalente a aumentar o bit 0x60 se você se restringir a ASCII:
for(char *p = pstr; *p; ++p)
*p = *p > 0x40 && *p < 0x5b ? *p | 0x60 : *p;
for(char *p = pstr;*p;++p) *p=*p>='A'&&*p<='Z'?*p|0x60:*p;
tolower()
. 55,2 vs. 44,15 na minha máquina.
int (*)(int)
assinatura. Aqui está o código usado para medições de desempenho gist.github.com/370497
Você está lidando apenas com strings ASCII e não tem problemas de localidade? Então, sim, seria uma boa maneira de fazer isso.
tolower()
deixa o argumento inalterado se não estiver no intervalo 'A' .. 'Z'.
Se você precisar de suporte Unicode na função de minúsculas, consulte esta pergunta: Light C Unicode Library
Se vamos ser tão desleixados quanto no uso tolower()
, faça o seguinte:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Mas, bem, meio que explode se você alimentá-lo com alguns símbolos / numerais, e em geral é maléfico. Boa pergunta para a entrevista, no entanto.