¿Cómo puedo convertir una cadena de mayúsculas y minúsculas en una cadena en minúsculas en C?
strlwr((char*)str);
Simplemente pasa por la cadena y la convierte.
¿Cómo puedo convertir una cadena de mayúsculas y minúsculas en una cadena en minúsculas en C?
strlwr((char*)str);
Simplemente pasa por la cadena y la convierte.
Respuestas:
Está en la biblioteca estándar, y esa es la forma más sencilla que puedo ver para implementar dicha función. Así que sí, simplemente recorra la cadena y convierta cada carácter a minúsculas.
Algo trivial como esto:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
o si prefieres one liners, entonces puedes usar este de JF Sebastian:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
parece más idiomático.
char *
, pero no si str es una matriz de caracteres. ¿Tienes alguna explicación para eso?
convertir a minúsculas equivale a subir el bit 0x60 si se limita 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 en mi máquina.
int (*)(int)
firma. Aquí está el código utilizado para las mediciones de rendimiento gist.github.com/370497
¿Está tratando con cadenas ASCII y no tiene problemas de configuración regional? Entonces sí, esa sería una buena forma de hacerlo.
tolower()
deja el argumento sin cambios si no está en el rango 'A' .. 'Z'.
Si necesita compatibilidad con Unicode en la función de minúsculas, consulte esta pregunta: Biblioteca Unicode Light C
Si vamos a ser tan descuidados en el uso tolower()
, haga esto:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Pero bueno, explota un poco si le das algunos símbolos / números, y en general es malvado. Sin embargo, es una buena pregunta para la entrevista.