Cadenas

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

Comentarios: 0