Programa mas completo realiza diferentes acciones:
- Cuenta el numero de vocales
- Cuenta el numero de consonantes
- Convierta la cadena en minusculas
- Convierta la cadena en mayusculas
- Muestra la cadena actual
- Introduce una nueva cadena
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h> //Para usar las funciones toupper y tolower (pasa de minusculas a mayusculas y viceversa)
/*************************** INDICE ***********************************
CUERPO DEL PROGRAMA
1. Informacion inicio
2. Desplegar Menu
2.1. Elegir opcion del menu
FUNCIONES
1. Funcion exclusiva para poner el titulo
2. Funcion para desplegar las 8 opciones del menu
3. Funcion para contar el numero de vocales en la cadena
4. Funcion para contar el numero de consonantes en la cadena
5. Funcion para convertir en minusculas la cadena en mayusculas
6. Funcion para convertir en mayusculas la cadena en minusculas
7. Funcion para salir
8. Funcion para un texto de prueba
PROBLEMAS A SOLUCIONAR
1. Volver al inicio
2. Resetear cadena de texto
3. Mejorar funcion "Salir"*/
//Encabezado de funciones
void titulo();
void mensajes_menu();
int num_vocales();
int num_consonantes();
char minusculas();
char mayusculas();
char salir();
char texto();
//Variables globales
char cadena[255];
/********************* CUERPO DEL PROGRAMA ****************************/
int main(int argc, char *argv[])
{
char menu;
//1. Informacion inicio
titulo();
mensajes_menu();
printf ("\n\n\n Escribe una cadena de texto (MAX. 255 letras)");
printf ("\n\n - ");
gets (cadena);
system ("CLS");
//2. Desplegar Menu
//2.1. Elegir opcion del menu
while(menu != 'F'){
system ("CLS");
mensajes_menu();
printf ("\n\n\n Eliga una opcion del menu: ");
scanf ("%c", &menu);
switch (menu){
case 'A':
//Cuenta el numero de vocales
num_vocales();
break;
case 'B':
//Cuenta el numero de consonantes
num_consonantes();
break;
case 'C':
//Convierta la cadena a minusculas
minusculas();
break;
case 'D':
//Convierta la cadena a mayusculas
mayusculas();
break;
case 'E':
//Muestra la cadena actual
system ("CLS");
printf ("\n\n ");
puts (cadena);
getch();
break;
case 'F':
//Introduce otra cadena
break;
case 'M':
//Muestra este menu
break;
case 'X':
//Finalizar el programa
exit (0);
//salir(); ----- Mal desarrollo de la funcion
break;
}
}
system("PAUSE");
return 0;
}
/************************** FUNCIONES *********************************/
//1. Funcion exclusiva para poner el titulo
void titulo(){
printf ("\n\t\t\t\t MENU - CADENAS\n\n");
}
//2. Funcion para desplegar las 8 opciones del menu
void mensajes_menu(){
//Con este array 'mensaje' pretendo mostar todos los mensajes del menu sin necesidad de recurrir a numerosos printf
char mensajes[][80] = {"A) Cuenta el numero de vocales",
"B) Cuenta el numero de
consonantes",
"C) Convierta la cadena a
minusculas",
"D) Convierta la cadena a
mayusculas",
"E) Muestra la cadena
actual",
"F) Introduce otra
cadena",
"M) Muestra este menu",
"X) Finalizar el
programa"};
int i, x = 8; //Variables para el for
for (i = 0; i < x; i++){
printf ("\n %s", mensajes[i]);
}
printf ("\n\n");
}
//3. Funcion para contar el numero de vocales en la cadena
int num_vocales(){
int i = 0, j; //Variables para for y array
int max_vocales[10] = {0}; //Array para almacenar el conteo de cada vocal
char vocales[] = {'a','e','i','o','u','A','E','I','O','U'}; //Array que almacena todas las vocales en minusculas y mayusculas
int total = 0, max = 0;
system ("CLS");
//Mientras que la cadena no llegue al caracter nulo continua el bucle
/*'j' inicia en la primera posicion del array 'vocales' (en este caso, la 'a') y recorre el array 'cadena' contabilizando
todas las 'a'. El numero total de 'a' se guardan en la primera posicion del array 'max_vocales' (inicializada en 0, para
evitar conflictos que ya he comprobado que surgen si no se inicializa en 0). El mismo proceso se realiza para el resto de
vocales.*/
while (cadena[i] != '\0'){
for(j = 0; j < 10; j++)
if (cadena[i] == vocales[j])
max_vocales[j]++;
i++;
}
//Mostrando el numero de repeticiones de cada vocal
/*Para evitar usar 5 'printf', uso un for que muestra el mismo texto variando la vocal y el numero de veces que cada
una de estas se repiten*/
for(i = 0; i < 10; i++){
printf("\n La %c aparece %d veces", vocales[i], max_vocales[i]);
total += max_vocales[i];
}
//Y la suma total de vocales
printf("\n\n El numero total de vocales es: %d\n\n", total);
getch();
}
//4. Funcion para contar el numero de consonantes en la cadena
int num_consonantes(){
/*Dado que esta funcion realiza el mismo proceso que la funcion 'vocales', usare las mismas variables con alguna
modificacion en los arrays. El codigo es practicamente el mismo salvo por alguna variacion numerica, por ello no detallo
su funcionamiento... ya lo hago en la otra funcion*/
int i = 0, j;
int max_consonantes[42] = {0};
char consonantes[] = {'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z',
'B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Y','Z'};
int total = 0, max = 0;
system ("CLS");
while (cadena[i] != '\0'){
for(j = 0; j < 42; j++)
if (cadena[i] == consonantes[j])
max_consonantes[j]++;
i++;
}
for(i = 0; i < 42; i++){
printf("\n La %c aparece %d veces", consonantes[i], max_consonantes[i]);
total += max_consonantes[i];
}
printf("\n\n El numero total de consonantes es: %d\n\n", total);
getch();
}
//5. Funcion para convertir en minusculas la cadena en mayusculas
char minusculas(){
int i;
system ("CLS");
for(i = 0; cadena[i]; i++)
cadena[i] = tolower(cadena[i]); //Convierte la cadena a minusculas
printf("%s\n\n", cadena); //Muestra la cadena convertida
getch();
}
//6. Funcion para convertir en mayusculas la cadena en minusculas
char mayusculas(){
int i;
system ("CLS");
for(i = 0; cadena[i]; i++)
cadena[i] = toupper(cadena[i]);
printf("%s\n\n", cadena);
getch();
}
//7. Funcion para salir
char salir(){
system ("CLS");
char fuera;
printf("\n Desea salir del programa (S/N)?: ");
scanf("%c", &fuera);
if ((fuera != 'N')||(fuera != 'n'));
else exit (0);
}
//8. Funcion para un texto de prueba
//Uso la siguiente funcion solo para cargar un texto y poder darle mas rendimiento al programa
char texto(){
char t_libro [][255] = {" Ejercicio de cadenas de texto C",
" ",
"FUNCIONES",
" Escriba las
siguientes funciones.",
" Cada una de estas
funciones debe tener un único parámetro.",
" La función solo
debe hacer lo que está especificado.",
" Ninguna de las
funciones debe mostrar nada por pantalla.",
" Escriba una
función que cuente y devuelva el número de vocales de la cadena de texto.",
" Escriba una
función que cuente y devuelva el número de consonantes de la cadena",
" Escriba una
función que convierta la cadena a minúsculas",
" Escriba una
función que convierta la cadena a mayúsculas",
" ",
"MENU",
" Escriba un
programa que realice las siguientes operaciones:",
" Solicite al
usuario una cadena de texto.",
" Esto podría ser
una frase entera.",
" Asuma que el
tamaño máximo de la cadena es 100 caracteres.",
" El menu mostrará
las siguientes opciones",
" A) Cuenta el
número de vocales",
" B) Cuenta el
número de consonantes",
" C) convierta
la cadena a minúsculas",
" D) convierta
la cadena a mayúsculas",
" E) Muestra
la cadena actual",
" F) Introduce
otra cadena",
" ",
" M) Muestra
este menu",
" X) Finalizar
el programa",
" ",
" Use un iterador
para ejecutar el menú hasta que se use la opción x.",
" El menú deberá
soportar tanto mayúsculas como minúsculas para elegir las opciones.",
" No existe un
limpiado de pantalla."};
strncpy (cadena, t_libro, 255);
int i, x = 31;
for (i = 0; i < x; i++){
printf ("\n %s", cadena[i]);
}
printf ("\n\n");
}
Escribir comentario