toupper y tolower en C: ejercicio resuelto
toupper y tolower en C: ejercicio resuelto
Si buscas toupper y tolower en C ejercicio resuelto, aquí tienes los patrones esenciales: convertir un carácter individual, normalizar una cadena completa a mayúsculas o minúsculas, y realizar una búsqueda case-insensitive.
toupper y tolower están declaradas en <ctype.h> y operan sobre un int (el valor del carácter cast a unsigned char). Si el carácter no es una letra, se devuelve sin modificar.
Enunciado
- Convierte el carácter
'a'a mayúscula y'Z'a minúscula. - Normaliza la cadena
"Hola, MUNDO! 123"a todo minúsculas y a todo mayúsculas. - Compara dos cadenas ignorando mayúsculas/minúsculas sin modificar los originales.
Solución en C
Resultado esperado
Errores frecuentes
- Pasar
chardirectamente sin cast aunsigned char: en plataformas dondechares con signo, caracteres con código > 127 (acentos, ñ) se representan como valores negativos. El estándar exige que el argumento seaunsigned charoEOF. - Modificar la cadena original cuando solo se necesita comparar: lo correcto es convertir a una copia o comparar carácter a carácter como en
strcmp_ci. - Asumir que
toupper/tolowerfunciona con locales: las funciones de<ctype.h>dependen del locale activo. Para caracteres ASCII básicos (a-z, A-Z) siempre funcionan. Para ñ, á, etc., hay que usarsetlocaleo funciones de la biblioteca de internacionalización. - Olvidar el
\0al final al construir la cadena destino: la funcióna_minusculasagrega el terminador explícitamente; sin élprintf("%s")leerá más allá del buffer.
Aplicación práctica
La normalización de cadenas a un caso uniforme se usa en búsquedas de texto, comparación de identificadores (comandos de shell, nombres de usuario), parseo de tokens de protocolos y cualquier sistema donde la entrada del usuario no tenga caso fijo.
Siguiente ejercicio recomendado
- Contar vocales en C: ejercicio resuelto
- Palíndromo en C: ejercicio resuelto
- strcmp y strncmp en C: ejercicio resuelto
- Todos los ejercicios de C
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Por qué hay que hacer cast a unsigned char antes de toupper/tolower?
Porque el estándar de C especifica que el argumento debe ser representable como unsigned char o debe ser EOF. En plataformas donde char tiene signo, un carácter con código > 127 se convierte en un entero negativo, lo que produce comportamiento indefinido al pasarlo a toupper/tolower. El cast (unsigned char) convierte el valor al rango correcto (0–255).
¿toupper y tolower modifican la cadena original?
No. Son funciones puras que reciben un carácter y devuelven otro. Para modificar una cadena hay que iterar carácter a carácter y reemplazar cada elemento con el resultado, como hace a_mayusculas en este ejercicio.
¿Cómo funciona la normalización con caracteres acentuados (á, é, ñ)?
Las funciones de <ctype.h> trabajan con el locale activo (setlocale). En el locale "C" (por defecto) solo tratan las letras ASCII. Para soportar caracteres UTF-8 como á o ñ hay que usar towupper/towlower de <wctype.h> con tipos wchar_t, o una biblioteca de internacionalización como ICU.