| Asignatura: Fundamentos de Informática | |
|
| Especialidad: Electrónica - UPV/EHU | ||
| Curso académico: 2009-2010 | ||
| Profesor: Ismael Etxeberria Agiriano |
Escribe un programa C que pida una frase y la convierta a "lenguaje de mensajes SMS", escribiéndola a continuación en pantalla.
Las normas para convertir la frase a SMS son las siguientes:
Se supone que la frase inicial está en minúsculas y que puede contener un máximo de 255 caracteres.
Ejemplo: Si la frase inicial leída es cad1:
La cadena con el resultado del mensaje SMS cad2 será:
Nota: los puntos suspensivos posteriores al terminador de la cadena indican que el contenido es indiferente.
Ejemplo de ejecución:
Dime una frase: quedamos a las 3 y paso por tu casa para ver la peli Mensaje SMS: kdams a las 3 y pas x t casa xa vr la pl
Nota: el texto subrayado del ejemplo es el introducido por teclado.
Una posible resolución de este ejercicio se proporciona a continuación:
/* 13-000.c */
#include <stdio.h>
int EsVocal (int car);
void main (void)
{
char fra[256];
char sms[256];
int i, j;
printf ("Introduce la frase: ");
gets (fra);
for (i = j = 0; fra [i] != '\0'; i++) {
if (fra[i] == 'q' && fra[i+1] == 'u') {
sms[j++] = 'k';
i++; /* Adelantamos la 'u' ya leía */
}
else if (fra[i] == 'p' &&
(fra[i+1] == 'o' || fra[i+1] == 'a') &&
fra[i+2] == 'r') {
sms[j++] = 'x';
i += 2; /* Adelantamos "or" o "ar" ya leídos */
}
else if (!EsVocal (fra[i]) || fra[i] == 'a')
sms[j++] = fra[i];
/* Si no ignoramos el carácter, es decir, no lo compiamos */
}
sms[j] = '\0';
printf ("Frase: [%s]\nSms: [%s]\n", fra, sms);
}
int EsVocal (int car)
{
return car == 'a' || car == 'e' || car == 'i' || car == 'o' || car == 'u';
}