Ir para conteúdo
Fórum Script Brasil
  • 0

Lista para Ordenação de Caracteres de um Arquivo de Texto


ISA.Fernandes

Pergunta

Boa Noite !

Preciso de uma ajudinha, estou tentando montar uma estrutura que ordene os caracteres de um arquivo.txt , some a quantidade de cada um e imprima na tela,

mas não consigo finalizar este código, alguém poderia me ajudar por favor...Preciso para no máximo daqui a dois dias..

O Arquivo que irá puxar é este:

Em comemoração ao 25o. aniversário do filme De Volta para o Futuro, haverá um relançamento

no cinema do "clássico" dos anos 1980 em cópia digital. E foi divulgado nesta quarta-feira (11) a

capa do pôster dessa versão restaurada do filme, que será lançada em Blu-Ray. Confira no link

abaixo a imagem ampliada.

tem que sair desse jeito na tela:

Char: ( Freq: 1

Char: ) Freq: 1

Char: 0 Freq: 1

Char: 2 Freq: 1

Char: 5 Freq: 1

Char: 8 Freq: 1

Char: 9 Freq: 1

Char: B Freq: 1

Char: C Freq: 1

Char: D Freq: 1

Char: F Freq: 1

...

__________________________________________________________________________________________________________________________________

código que tenho:

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

//DECLARANDO AS ESTRUTURAS-------------------------------------------------------------------------------
typedef struct dado
{
 int peso;
 char caracter;
 struct dado *esq;
 struct dado *dir;        
}Dado;

typedef struct nodelista
{
 struct dado *node;
 struct nodelista *prox;        
}NodeLista;
//------------------------------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------------------------------
//CRIANDO A PRIMEIRA FUNÇÃO------------------------------------------------------------------------------
NodeLista *NovaNodeLista()  //função que cria uma nova lista.
{
 return NULL;        
}
//------------------------------------------------------------------------------------------------------------------
//CRIANDO A SEGUNDA FUNÇÃO - CRIAÇÃO DO ENDEREÇO DE MEM / ORDENAÇÃO------------------- 
NodeLista *PushOrdenada(NodeLista *nd, int p, char l)
{
 //Criando a caixinha
 Dado *novodado=(Dado*)malloc(sizeof(Dado)); 
 novodado->peso=p;
 novodado->caracter=l;
 novodado->esq=NULL;
 novodado->dir=NULL;

 NodeLista *novanodelista=(NodeLista*)malloc(sizeof(NodeLista));
 novanodelista->node=novodado;
 novanodelista->prox=NULL;

 //no caso se listIver estar vazia
 if(nd==NULL)
 {
             return novanodelista;
 }
 // no caso se lista tive apenas um elemento
 else if(nd->prox==NULL)
 {
      if(nd->node->peso>=novanodelista->node->peso)
      {
          novanodelista->prox=nd;
          return novanodelista;
      }
      else
      {
          nd->prox=novanodelista;
          novanodelista->prox=NULL;
          return nd;
      }
 }
 // no caso se lista tiver mais de um elemento
 else
 {
       if(nd->node->peso>=novanodelista->node->peso)
      {
          novanodelista->prox=nd;
          return novanodelista;
      }
      
      NodeLista *aux=(NodeLista*)malloc(sizeof(NodeLista));
      aux=nd;
      while(aux->prox!=NULL && novanodelista->node->peso > aux->prox->node->peso)
      {
          aux=aux->prox;
      }
      
      if(aux->prox==NULL)
      {
                        aux->prox=novanodelista;
                        novanodelista->prox=NULL;
                        return nd;
      }
      novanodelista->prox=aux->prox;
      aux->prox=novanodelista;
      return nd;
 } 
}
//-------------------------------------------------------------------------------------------------------------------
//FUNÇÃO QUE IMPRIME O RESULTADO NA TELA-------------------------------------------------------------
void ImprimeLista(NodeLista *nd)
{    
     if(nd==NULL)
       {
        printf("Erro: A fila esta vazia!\n");
       }
     else
       {
        NodeLista *aux;
        aux=nd;
        
        while(aux!=NULL)
         {
          printf("Char: %c Freq: %d\n", aux->node->caracter, aux->node->peso);    
          aux=aux->prox;          
         }
       }
}

//-------------------------------------------------------------------------------------------------------------------

//FUNÇÃO PRINCIPAL MAIN() ----------------------------------------------------------------------------------

int main(int argc, char *argv[])
{
    
 //declarando as variáveis
 int i,p;
 int TabAscii;
 int VetorInteiros[256];
 char VetChar[256];
 char l,r,k;
 l='a';
 r='d';
 k='p';
 char *VetorChar=(char*)malloc(512*sizeof(char));


 //zerando os vetores
 for(i=0; i<=255; i++)
    {
     VetorInteiros[i]=0;    
     VetChar[i] = i;        
    }

 //abrindo o arquivo
 FILE *arquivo=fopen("Arquivo.txt", "r");

  if(arquivo !=NULL)
   printf("Arquivo aberto com sucesso!\n");
  else
   printf("Não foi possível abrir o arquivo!\n");         
  
    
    //copiando do arquivo para o ponteiro de caracteres
    while(!feof(arquivo))
    {
     fscanf(arquivo,"%[^\n]", VetorChar);
    }
  
    //contando as repetições de cada caracter
      for(i=0; (i<strlen(VetorChar) && VetorChar[i] != '\n'); i++)
        {    
          TabAscii = VetorChar[i];
          VetorInteiros[TabAscii]++;
        }
        
            for(i=0; i<256; i++)       //imprimindo o ponteiro com a frequencia
            {
              if (VetorInteiros[i] != 0)
             printf("Char: %c Freq: %d\n", VetChar[i], VetorInteiros[i]);    
            }
    NodeLista *nd;
    nd=NovaNodeLista();
  
   for(i=0;i<256;i++)
    {
      if(VetorInteiros[i]!=0)
       {
         nd=PushOrdenada(nd, VetorInteiros[i], VetChar[i]);
       }                 
                     
    }
   
    printf("%c\n", nd->node->caracter);
    
   
    ImprimeLista(nd);
    
    fclose(arquivo);
    system("pause");
}
//FINAL DA FUNÇÃO PRINCIPAL----------------------------------------------------------------------------------

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...