Ir ao conteúdo
  • Cadastre-se

C Contador de repetição de caracteres


Posts recomendados

Dale galera!
To com dificuldade na implementação de um problema em C.

Basicamente tu recebe uma quantidade n de frases, e faz a busca entre as palavras as letras que mais se repetem. BUT

meu professor de programação pediu pra ordenar as letras que se reptem, em ordem decrescente..
Eu terminei agora de fazer a criptoanálise , e encontrei todas as repetições dos caracteres nas frases. Mas ta bem complicado colocar uma ordenação nisso. kkkk
Agradeço a quem poder me ajudar!
 

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

int main(int argc, char **argv)
{	
	char string[100];
	int freq_up[26]={0};
	int freq_down[26]={0};
	int n;
	
	scanf("%d",&n);
	
	for(int x=0;x<=n;x++)
	{
		gets(string);
	
		for(int i=0;i<(strlen(string));i++)
		{
			if(string[i]>='a' && string[i]<='z')
			{
				freq_down[string[i]-97]++;
				
			}
			if(string[i]>='A' && string[i]<='Z')
			{
				freq_up[string[i]-65]++;
				
			}
		}
		
		setbuf(stdin,NULL);
		
	}
		for (int i = 0; i < 26; i++)
		{
			if(freq_up[i]>=1)
			{
				printf("%c apareceu %d vezes \n",i+65,freq_up[i]);
			}
		
		}
		
		for (int i = 0; i < 26; i++)
		{
			if(freq_down[i]>=1 )
			{
				printf("%c apareceu %d vezes \n",i+97,freq_down[i]);
			}
		}
	
	
	return 0;
}


 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Poisoned00  Olá. Vou passar um código para exemplo de ordenar um vetor em ordem crescente. Vê se ajuda:

 

#include <stdio.h>

int main()
{
    int vet[] = { 4, 701, 2, 43, 1, 9, 21, 45, 0, 7, 12, 51, 73, 4};
    int i, j;

    int tam = sizeof(vet) / sizeof(int);

    int maior = vet[0];

    for (i = 0; i < tam; i++)
    {
        for (j = 0; j < i; j++)
        {
            if (vet[j] > vet[i])
            {
                int temp = vet[i];
                vet[i] = vet[j];
                vet[j] = temp;
            }
        }
    }

    for (i = 0; i < tam; i++)
    {
        printf("%d ", vet[i]);
    }

    return 0;
}

Para o caso de caracteres, q é seu caso, funciona do mesmo modo

adicionado 1 minuto depois

Esse maior q saiu aí é de outro exercício. Desconsidere

Link para o comentário
Compartilhar em outros sites

Precisa diferenciar letras maiúsculas e minúsculas? Não pode contar 'A' e 'a' como sendo a mesma letra?

 

De qualquer maneira, usando o seu método de usar o índice do vetor para indicar a letra, teria que usar outro vetor com os índices das letras, e ordenar os índices no vetor dependendo dos valores de frequência de cada letra.

 

Assim (fiz apenas para as letras maiúsculas / freq_up):

    int letra[26], c;
    
    //Preenche o vetor com os índices das letras
    for(int i = 0; i < 26; i++)
        letra[i] = i;
    
    //Ordenação por Inserção (Insertion Sort)
    for(int i = 1; i < 26; i++){
        c = letra[i];
        int j;
        for(j = i; j > 0 && freq_up[letra[j-1]] < freq_up[c]; j--){
            letra[j] = letra[j-1];
        }
        letra[j] = c;
    }
    
    //Imprime as letras com ordem de frequencia decrescente
    for (int i = 0; i < 26; i++)
    {
        if(freq_up[letra[i]]>=1)
    	{
            printf("%c apareceu %d vezes \n", 'A'+letra[i], freq_up[letra[i]]);
        }
    }	

Note que usei o algoritmo de ordenação por inserção (https://pt.wikipedia.org/wiki/Insertion_sort), mas poderia usar outros algoritmos como o Bubble Sort (https://pt.wikipedia.org/wiki/Bubble_sort) que o @giu_d usou.

 

Dê uma pesquisada sobre algoritmos de ordenação (https://pt.wikipedia.org/wiki/Algoritmo_de_ordenação).

Link para o comentário
Compartilhar em outros sites

@giu_d Não sei muitos, e mesmo os que já usei preciso olhar novamente como funciona quando volto a usar. O mais importante é saber que existem, para que servem, em que tipo de situação são úteis, etc. Com a internet a disposição basta fazer uma simples pesquisa pra achar o algoritmo novamente na hora que precisar. Alguns que usa mais frequentemente você acaba guardando de tanto usar. Algoritmos de ordenação e randomização são exemplos que são muito úteis e usados frequentemente...

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...