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

Parser de texto+hashing+dicionário


Lucas de Lima

Pergunta

Sempre que executo, o processo não termina (ou eu que perdi a paciência cedo demais) e eu tenho de parar. Talvez alguém consiga ver algo errado no código.

A ideia do exercício é: Pegar um texto, fazer uma lista das palavras desse texto (por isso o parser), e utilizar hashing para fazer um dicionário com uma instância de cada palavra. O código está logo abaixo.

Desde já agradeço,

Lucas.

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

struct lista {

    lista* prox;
    char palavra[40];

};



struct hashtable{

    char palavra[40];

};

// Structs usadas definidas


unsigned int hashfunction(char *s) {

         unsigned int hashval;

                  for (hashval = 0; *s != ''; s++){

                 hashval = *s + 31 * hashval;
                  }


        return hashval % 5000;

}

// Métodos usados, não sei se hashfunction está certa. Peguei na internet.


lista* parser(char* c){

    lista *p = (lista*) malloc(sizeof(lista));
    lista *q = p;
    char palavra[40]="";
    int i = 0;
    int j = 0;


    while (c[i+1]!=''){


        if(c[i] != ',' || c[i] != '.' || c[i] != ' ' || c[i] != '/'){

            palavra[j]=c[i];
            j++;

        }



        if( c[i] == ',' || c[i] == '.' || c[i] == ' ' || c[i] == '/'){

            strcpy(palavra,q->palavra);
            q=q->prox;
            j=0;
            memset ((void *) &palavra, '', sizeof(palavra));

        }



        i++;

    }


    return p;

}

// Parser implementado.


hashtable* hashing(hashtable* tabela, lista* l){

    lista* p = l;
    unsigned int valor;


    while(p->prox!=NULL){


        valor = hashfunction(p->palavra);


        if(tabela[valor].palavra==NULL){
            strcpy(p->palavra, tabela[valor].palavra);
        }

        p=p->prox;

    }


    return tabela;

}


// Processo de hashing implementado.




int main() {

    char texto[50000];

    hashtable tabela[5000];

    printf("Digite o texto desejado: ");

    gets(texto);

    hashing(tabela,parser(texto));


    for (int i=0;i < 5000;i++){

        if(tabela[i].palavra!=''){
            printf("%c", tabela[i].palavra);
          }
   }


    system("pause");

    return 0;

}

Editado por Lucas de Lima
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...