¿Como podria hacer esto en C?

varuk

Hola. Tengo un problema para hacer este ejercicio.
El problema es que no sé como manejar el texto arbitrario que hay que pasar a minusculas. Como pedir el texto, manejarlo etc. Este es el enunciado del problema en cuestión:

Escribir un programa que dado un texto arbitrario de entrada, produzca el mismo texto convertido a minúsculas. El texto puede contener las vocales con tilde, la U con diéresis y la letra Ñ (es decir, las de la tabla de arriba), que deben ser convertidas también a minúsculas.

Todos los demás caracteres no deben ser modificados, sino que se deben escribir exactamente igual en la salida. En particular, no se deben tratar letras como la Ç, las tildes invertidas, etc.

Gracias.

Gnos1s

El truco de este ejercicio es saber la correspondencia entre letras y su entero que lo representa en la tabla ASCII:

Primero haces un gets(texto) para obtener la línea (de este modo se obtienen líneas por teclado de longitud indeterminada). Luego, para cada caracter de texto (texto), miras si se encuentra en el intervalo de las mayúsculas (texto > 64 && texto < 91), en ese caso le sumas 32 (la distancia entre la letra mayúscula y la letra minúscula en la tabla).

Luego imprimes la cadena entera y listo.

De todos modos deberías saber que estos ejercicios del Mooshak no son obligatorios, aunque te vendrán bien para calentar ;).

kolka

http://www.conclase.net/c/librerias/funcion.php?fun=toupper

Ese es otro método.

Gnos1s

Ese ejercicio está pensado para hacerlo como yo lo he dicho, porque así lo piden en el boletín ;).

Evidentemente, tu solución #3 es buena ^.

Riu

#2 no se lo resuelvas joder, que sino no aprenden.
#3 eso tampoco tiene gracia , cuando lo que te piden es que pienses xdd

B

La funcion de #3 internamente hace lo que ha puesto #2 ¬¬ xD

IAF

(texto > 64 && texto < 91)

En este rango de texto no esta por ejemplo la Ñ (165) q tb piden para transformar en minúsculas, así q hay algunos casos excepcionales xD

JuAn4k4

Los casos excepcionales se tratan a parte, por ser casos excepcionales.

El texto lo puedes manejar con un vector de caracteres lo suficientemente grande.

char texto[512]; por ejemplo.

Para recojer texto puedes usar scanf , gets, read, la funcion que "prefieras" osea la que mas le guste al profesor.

Las funciones toupper/tolower segun donde estes trabajando no van, asique mi recomendacion es hacerlas tu como ha dicho #3 + casos excepcionales. Para saber cuales son los casos excepcionales haces un programa de prueba:

printf(" ñ: %d , ü : %d , ... etc ", 'ñ' , 'ü' , .. etc ) ;

y veras lo que vale su ascii en decimal.

Gnos1s

Lo mejor es tratar los caracteres como enteros, aunque en principio uno pueda pensar en definir un char.

Luego se imprime como %s y listo :).

Usuarios habituales