Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: nomsaro89 en 2 Octubre 2019, 04:43 am



Título: Contar cuantas veces se repite cada vocal en una frase que ingresa el usuario
Publicado por: nomsaro89 en 2 Octubre 2019, 04:43 am
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
  1.  
  2. #include <conio.h>
  3. #include <stdio.h>
  4.  
  5. int main ()
  6. {
  7. char frase[30];
  8. int c;
  9. 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]*/
  10.  
  11. printf ("Ingresa una frase:  ");
  12. scanf ("%d", &frase[30], '\n');
  13.  
  14. for (int c=0; c<30; c++)
  15. {
  16.  
  17.    switch (frase [c])
  18.    {
  19.      case 'a': vocal_a++; break;
  20.      case 'e': vocal_e++; break;
  21.      case 'i': vocal_i++; break;
  22.      case 'o': vocal_o++; break;
  23.      case 'u': vocal_u++; break;
  24.    }
  25.  
  26. }
  27.  
  28.  
  29. printf ("\nVocal_a: %d", vocal_a);
  30. printf ("\nVocal_e: %d", vocal_e);
  31. printf ("\nVocal_i: %d", vocal_i);
  32. printf ("\nVocal_o: %d", vocal_o);
  33. printf ("\nVocal_u: %d", vocal_u);
  34.  
  35.  
  36. getch ();
  37. return 0;
  38. }
  39.  
  40.  



Título: Re: Contar cuantas veces se repite cada vocal en una frase que ingresa el usuario
Publicado por: K-YreX en 2 Octubre 2019, 12:21 pm
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()>.
Código
  1. #include <stdio.h>
  2.  
  3. #define MAX_SIZE 30 // constante para determinar la longitud maxima de la cadena
  4.  
  5. int main(){
  6.    char frase[MAX_SIZE];
  7.  
  8.    printf("Introduce una frase: ");
  9.    fgets(frase, MAX_SIZE, stdin);
  10.  
  11.    // el resto del programa
  12.  
  13.    getchar();
  14.    return 0;
  15. }
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:
Código
  1. for(size_t i = 0; i < MAX_SIZE; ++i){
  2.    switch(frase[i]){
  3.        case 'a': case 'A': ++vocal_a; break;
  4.        case 'e': case 'E': ++vocal_e; break;
  5.        //...
  6.    }
  7. }


Título: Re: Contar cuantas veces se repite cada vocal en una frase que ingresa el usuario
Publicado por: nomsaro89 en 2 Octubre 2019, 13:15 pm
Agradezco mucho su ayuda