Ayuda! Letra mas repetida

Iniciado por Estudiambre, 18 Noviembre 2018, 23:59 PM

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

Estudiambre

Hola, me piden: Solicitar la introducción de una cadena, mostrar el número de veces que se repiten las letras (a, b, c y d) y mostrar cuál de ellas apareció mas veces en la cadena. Ya logre que me mostrara la cantidad de cada una de ellas pero no cual es la que se repite mas veces

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

enum {a,b,c,d};

void contar(char frase[100],int letras[4]);

int main()
{
char frase[100];
int letras[4],i;

for(i=0;i<4;i++){
letras[i]=0;
}

printf("Escribe una frase: ");
gets(frase);
contar(frase,letras);
printf("\n Letra \t Se Repite");
printf("\n A \t %d",letras[a]);
printf("\n B \t %d",letras[b]);
printf("\n C \t %d",letras[c]);
printf("\n D \t %d",letras[d]);
getchar();
return 0;
}
void contar(char frase[100], int letras[4])
{
for(int i=0;frase[i] !='\0' && frase[i] !='\n';i++){
switch(frase[i]){
case 'a': case 'A': letras[a]++; break;
case 'b': case 'B': letras[b]++; break;
case 'c': case 'C': letras[c]++; break;
case 'd': case 'D': letras[d]++; break;

}
}
}

K-YreX

Tienes en el array <letras> el número de veces que aparece cada una. Simplemente compara esos valores y guarda el máximo. Por ejemplo:
Código (cpp) [Seleccionar]

int maximo = letras[0], indiceMaximo = 0;
for (i = 1; i < 4; i++){
    if(letras[i] > maximo){
        maximo = letras[i];
        indiceMaximo = i;
    }
}


Si quieres hacerlo usando la enum te dejo que investigues cómo podrías hacerlo.

PD: Para futuras consultas mete tu código entre etiquetas GeSHi ya que sino los índices con "[ ]" y una "i" o una "b" dentro desaparecen, puedes verlo tú mismo y el código es más complicado de entender. Y te recomiendo que sustituyas <gets(frase)> por <fgets(frase, 100, stdin)>.
Código (cpp) [Seleccionar]

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