Quiero convertir una cadena en español a mayúsculas. Uso la función toupper para todos los personajes. La función no convierte caracteres con acento:
PROTECCIÓN
Ni el personaje enye:
DAñO
Yo uso la función setlocale.
setlocale(LC_ALL, "es_ES");Es posible obtener un buen resultado con setlocale(LC_ALL, "es_ES.utf8"); , y el uso de wchar_t y towupper(.) .
Producción
protección daño PROTECCIÓN DAÑO #include <stdio.h> #include <stdlib.h> #include <wctype.h> #include <wchar.h> #include <locale.h> int main(void) { if (!setlocale(LC_ALL, "es_ES.utf8")) return 1; wchar_t input[] = L"protección daño"; int length = sizeof(input)/sizeof(input[0]); wchar_t output[length]; for (int i = 0; i < length-1; ++i) { output[i] = towupper(input[i]); } output[length-1] = '\0'; printf ("%ls %ls\n", input, output); return 0; }