Contar cuantas veces se repite cada vocal en una frase que ingresa el usuario

Iniciado por nomsaro89, 2 Octubre 2019, 04:43 AM

0 Miembros y 1 Visitante están viendo este tema.

nomsaro89

Buenas noches.
Tengo un código el cual deberá pedir  al usuario que introduzca una frase y el programa le muestre: el tamaño de la cadena y el numero de veces que se repitieron las vocales en la frase.

Al compilar no hace la función del conteo de las vocales.
Agradeceria mucho si me pudieran ayudar a hacer que trabaje correctamente.
:)


Código (cpp) [Seleccionar]


#include <conio.h>
#include <stdio.h>

int main ()
{
char frase[30];
int c;
int  vocal_a=0, vocal_e=0, vocal_i=0, vocal_o=0, vocal_u=0;     /*variables para almacenar los contadores de cada vocal [color=black][color=orange][color=limegreen][color=maroon][color=purple][/color][/color][/color][/color][/color]*/

printf ("Ingresa una frase:  ");
scanf ("%d", &frase[30], '\n');

for (int c=0; c<30; c++)
{

   switch (frase [c])
   {
     case 'a': vocal_a++; break;
     case 'e': vocal_e++; break;
     case 'i': vocal_i++; break;
     case 'o': vocal_o++; break;
     case 'u': vocal_u++; break;
   }

}


printf ("\nVocal_a: %d", vocal_a);
printf ("\nVocal_e: %d", vocal_e);
printf ("\nVocal_i: %d", vocal_i);
printf ("\nVocal_o: %d", vocal_o);
printf ("\nVocal_u: %d", vocal_u);


getch ();
return 0;
}




K-YreX

Eso no funciona primero porque en la función <scanf()> estás usando %d que es para variables de tipo entero (int) y además estás intentando guardar en la posición 30 del array <frase>. Esa posición no es accesible ya que si el tamaño es 30, las posiciones van de 0 a 29.
Para guardar cadenas es mejor que uses la función <fgets()>.

#include <stdio.h>

#define MAX_SIZE 30 // constante para determinar la longitud maxima de la cadena

int main(){
    char frase[MAX_SIZE];

    printf("Introduce una frase: ");
    fgets(frase, MAX_SIZE, stdin);

    // el resto del programa

    getchar();
    return 0;
}

El resto del programa está bien pero como recomendaciones te diría que no uses la librería <conio.h> (que sirve para la función <getch()>) porque no es estándar. Usa mejor la función <getchar()> que pertenece a la librería <stdio.h> y así sólo necesitas esa librería.

Y en el <switch> puedes hacer que cuente también las mayúsculas:

for(size_t i = 0; i < MAX_SIZE; ++i){
    switch(frase[i]){
        case 'a': case 'A': ++vocal_a; break;
        case 'e': case 'E': ++vocal_e; break;
        //...
    }
}
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;