[C] insere mot table de hachage
stroumpf
Messages postés
292
Statut
Membre
-
beslae Messages postés 122 Statut Membre -
beslae Messages postés 122 Statut Membre -
Bonjour,
j'ai un probleme au niveau de la fonction : void insere_th(Liste **TableHash, const char *mot)
qui insere un mot dans une table de hachage : elle verifi si le mot qu'on veut inserer est deja dans la table on incremente donc la frequence du mot .
il l'affiche une erreur de segmentation.
aidez moi svp
merci
j'ai un probleme au niveau de la fonction : void insere_th(Liste **TableHash, const char *mot)
qui insere un mot dans une table de hachage : elle verifi si le mot qu'on veut inserer est deja dans la table on incremente donc la frequence du mot .
il l'affiche une erreur de segmentation.
aidez moi svp
merci
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define BUFFSIZE 64
#define FNAME "d:\\test.txt"
#define TAILLEHASH 307
typedef struct L
{
int freq;
char mot[50];
struct L *suivant;
} Liste;
char* get_word(FILE *fdesc, char *buff, size_t size)
{
char *ret=NULL;
if( fdesc!=NULL && buff!=NULL && size>0 )
{
int c;
int i=0;
while( ret==NULL && i<size && (c=fgetc(fdesc))!=EOF )
{
if( isalpha(c) )
{
buff[i]=c;
i++;
}
else if( i>0 )
{ /* mot */
buff[i]='\0';
ret=buff;
}
}
}
return ret;
}
unsigned int hash_cle(const char * mot)
{
unsigned int val = 0;
for(; *mot != '\0'; ++mot)
{
val = *mot + 31 * val;
}
return val % TAILLEHASH;
}
void insere_th(Liste **TableHash, const char *mot)
{
TableHash = (Liste **) malloc (TAILLEHASH * sizeof(Liste *));
/* calcule le hash du mot */
unsigned int idx = hash_cle(mot);
/* recherche du mot */
Liste *p = TableHash[idx];
if(strcmp(p->mot, mot)==0)
p->freq++;
free(TableHash);
}
int main(void)
{
FILE *fdesc=fopen(FNAME,"r");
Liste **TableHash;
if( fdesc )
{
char buff[BUFFSIZE];
char prec[BUFFSIZE];
if( get_word(fdesc,prec,BUFFSIZE) )
{
while( get_word(fdesc, buff, BUFFSIZE) )
{
//printf("%s %s\n",prec,buff);
char s3[BUFFSIZE * 2];
sprintf(s3, "%s %s", prec, buff);
puts(s3);
strncpy( prec,buff,BUFFSIZE);
insere_th(TableHash,s3);
}
}
fclose(fdesc);
}
return 0;
}
A voir également:
- [C] insere mot table de hachage
- Table ascii - Guide
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Table des matières word - Guide
- Mot de passe administrateur - Guide
5 réponses
Bah normal, t essaye de modifier le membre freq de la structure Liste pointé par p or p pointe vers un truc inconnue encore (tableau de quelque chose a l index idx qui connais pas :P )
stroumpf
Messages postés
292
Statut
Membre
2
donc comment faire, comment modifier, aucune idée moi ^^
Je sais pas mais moi j aurais mi un petit for( ) pour parcourir les index idx en plus je le vois null par d autre en variable globale ton idx !!
quelqu un avait dit :
declarer les variable, initialiser les variables, et apres travailler ladessus
quelqu un avait dit :
declarer les variable, initialiser les variables, et apres travailler ladessus
Bah faut deja que tu sache ce que tu veux faire avec ton idx, pourquoi il est la ? il sert a quoi ?? parceque moi non plus je comprend pas ce que tu veux faire o fait val+=31 + *mot ??
juste une petite question c est quoi le 31 ??
juste une petite question c est quoi le 31 ??
Plus concretement tu peux m'expliquer ce que tu veux faire ...
voila t as une liste chainée, A->B->C .... sur chaque feuille il y a un mot une fréquence et le suivant, tu insert des feuilles et tous normal, c est quoi le 307, le 31, j veux dire ca vient d ou ??
voila t as une liste chainée, A->B->C .... sur chaque feuille il y a un mot une fréquence et le suivant, tu insert des feuilles et tous normal, c est quoi le 307, le 31, j veux dire ca vient d ou ??
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j ai lu vite fais ca, mais je vois toujours pas trop ce que tu veux faire !!
https://fr.wikipedia.org/wiki/Table_de_hachage
https://fr.wikipedia.org/wiki/Table_de_hachage