Jump to content
Fórum Script Brasil
  • 0

Parser de texto+hashing+dicionário


Lucas de Lima

Question

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;

}

Edited by Lucas de Lima
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...