Come posso convertire una stringa di maiuscole e minuscole in una stringa minuscola in C?
strlwr((char*)str);
Passa semplicemente attraverso la stringa e la converte.
Come posso convertire una stringa di maiuscole e minuscole in una stringa minuscola in C?
strlwr((char*)str);
Passa semplicemente attraverso la stringa e la converte.
Risposte:
È nella libreria standard, e questo è il modo più diretto che posso vedere per implementare una tale funzione. Quindi sì, basta scorrere la stringa e convertire ogni carattere in minuscolo.
Qualcosa di banale come questo:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
o se preferisci una riga, puoi usare questa di JF Sebastian:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
sembra più idiomatico.
char *
, ma non se str è un array di caratteri. Hai qualche spiegazione per questo?
convertire in minuscolo equivale a aumentare il bit 0x60 se ti limiti ad 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 contro 44.15 sulla mia macchina.
int (*)(int)
firma. Ecco il codice utilizzato per le misurazioni delle prestazioni gist.github.com/370497
Hai solo a che fare con stringhe ASCII e non hai problemi di locale? Allora sì, sarebbe un buon modo per farlo.
tolower()
lascia l'argomento invariato se non si trova nell'intervallo "A" .. "Z".
Se hai bisogno del supporto Unicode nella funzione minuscola, vedi questa domanda: Light C Unicode Library
Se vogliamo essere così sciatti da usare tolower()
, fallo:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Ma, beh, un po 'esplode se gli dai dei simboli / numeri, e in generale è malvagio. Buona domanda per l'intervista, però.