Never use gets
. Use fgets
. I'll explain more about this here and > here .
Your approach is wrong. To find the most common letter, use a table (with an array) to compute these letters.
Remember that char
occupies only one byte of memory. This means that the table has 256 numbered positions from 0 to 255.
The strlen
function is slow because it runs through the string to the end of it to find the size. When using it as a condition of stopping for
, it will be traversed entirely in each iteration. The solution is to use strlen
only once and save the result to a variable.
Logo:
#include <stdio.h>
#include <stdlib.h>
int main() {
char string[100];
char tabela[256];
// Limpa a tabela.
for (int i = 0; i < 256; i++) {
tabela[i] = 0;
}
// Lê a frase do usuário.
printf ("\nEscreva um texto: \n");
fgets(string, 100, stdin);
int tamanho = strlen(string);
// Monta a tabela de frequências.
for (int i = 0; i < tamanho; i++) {
tabela[string[i]]++;
}
// Busca o índice de maior ocorrência na tabela.
int maior = 0;
char letra = 'oRatoRoeuARoupaDoReiDeRomaEARainhaRoeuOResto.
';
for (int i = 0; i < 256; i++) {
int t = tabela[i];
if (t > maior) {
maior = t;
letra = (char) i;
}
}
// Mostra o resultado.
printf("\nO caractere '%c' aparece %d vezes.\n", letra, maior);
// Fim.
return 0;
}
With this entry:
O caractere 'R' aparece 8 vezes.
It generates this result:
O rato roeu a roupa do rei de Roma e a rainha roeu o resto.
See here working on ideone.
There is a still though. If I use this entry:
// Monta a tabela de frequências.
for (int i = 0; i < tamanho; i++) {
char c = string[i];
// Ignora o espaço.
if (c == ' ') continue;
// Se for uma letra minúscula, troca por maiúscula.
if (c >= 'a' && c <= 'z') c = c - 'a' + 'A';
// Contabiliza na tabela.
tabela[c]++;
}
The most often occurring character is white space. This is probably not what you want. It also happens that r
(lowercase) and R
(uppercase) are different characters. To solve this, you can change the for
that mounts the table to this:
O rato roeu a roupa do rei de Roma e a rainha roeu o resto.
With this entry:
O caractere 'O' aparece 9 vezes.
It generates this result:
#include <stdio.h>
#include <stdlib.h>
int main() {
char string[100];
char tabela[256];
// Limpa a tabela.
for (int i = 0; i < 256; i++) {
tabela[i] = 0;
}
// Lê a frase do usuário.
printf ("\nEscreva um texto: \n");
fgets(string, 100, stdin);
int tamanho = strlen(string);
// Monta a tabela de frequências.
for (int i = 0; i < tamanho; i++) {
tabela[string[i]]++;
}
// Busca o índice de maior ocorrência na tabela.
int maior = 0;
char letra = 'oRatoRoeuARoupaDoReiDeRomaEARainhaRoeuOResto.
';
for (int i = 0; i < 256; i++) {
int t = tabela[i];
if (t > maior) {
maior = t;
letra = (char) i;
}
}
// Mostra o resultado.
printf("\nO caractere '%c' aparece %d vezes.\n", letra, maior);
// Fim.
return 0;
}
See here working on ideone.