Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Estudiambre en 18 Noviembre 2018, 23:59 pm



Título: Ayuda! Letra mas repetida
Publicado por: Estudiambre en 18 Noviembre 2018, 23:59 pm
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
Código:
#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;

}
}
}


Título: Re: Ayuda! Letra mas repetida
Publicado por: K-YreX en 19 Noviembre 2018, 00:26 am
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
  1. int maximo = letras[0], indiceMaximo = 0;
  2. for (i = 1; i < 4; i++){
  3.    if(letras[i] > maximo){
  4.        maximo = letras[i];
  5.        indiceMaximo = i;
  6.    }
  7. }

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)>.