From 41bf8d90c571cbe637380242fcd487e8a652bb1b Mon Sep 17 00:00:00 2001 From: rsSimonin Date: Tue, 2 Apr 2019 15:55:11 +0200 Subject: [PATCH] correction de bug --- arbre.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------- 1 file changed, 64 insertions(+), 35 deletions(-) diff --git a/arbre.c b/arbre.c index d10d8b9..cf844c5 100644 --- a/arbre.c +++ b/arbre.c @@ -34,85 +34,114 @@ bool fin_de_mot(struct arbre *arbre) void cons_dico(struct dico **pt_dico,char val){ Dico *mondico=malloc(sizeof(struct dico)); - mondico->alpha[val-97]->val=val; // (ascii)->a = 97 - for(int i=0;i<26;i++){ - mondico->alpha[val-97]->suite[i]=NULL; - } - mondico->alpha[val-97]->finmot=false; - (*pt_dico)=mondico; -} - -void cons_arbre(struct arbre **pt_arbre,char val){ - struct arbre *monarbre=malloc(sizeof(struct arbre)); - monarbre->val=val; // (ascii)->a = 97 + Arbre *monarbre=malloc(sizeof(struct arbre)); + monarbre->val=val; + monarbre->finmot=false; + for(int i=0;i<26;i++){ monarbre->suite[i]=NULL; } - monarbre->finmot=false; - (*pt_arbre)=monarbre; -} - + mondico->alpha[val-'a']=monarbre; + (*pt_dico)=mondico; +} void ini_dico(struct dico * pt_dico){ + printf("ini_dico"); for(int i=0;i<26;i++){ - cons_dico(&pt_dico,97+i); + cons_dico(&pt_dico,'a'+i); } } -void ajout_mot(struct dico *pt_dico,char mot[]){ - int i=0; +void ajout_mot(struct arbre *pt_arbre,char *mot, int i){ + while(mot[i]!='\0'){ - if (pt_dico->alpha[mot[i]-'a']==NULL){ - cons_arbre(&(pt_dico->alpha[mot[i]-'a']),mot[i]); - + + + if (pt_arbre==NULL){ + Arbre *monarbre=malloc(sizeof(struct arbre)); + monarbre->val=mot[i]; + monarbre->finmot=false; + for(int i=0;i<26;i++){ + monarbre->suite[i]=NULL; + } + pt_arbre=monarbre; + } i++; + ajout_mot(pt_arbre,mot,i); } - pt_dico->alpha[mot[i]-'a']->finmot=true; - + } -void charger_arbre(FILE *fp, struct dico **pt_dico) +void charger_arbre(FILE *fp, struct dico **ppt_dico) { char mot[20]; + ini_dico(*ppt_dico); while (fscanf(fp, "%s", mot)!=EOF){ - ajout_mot(*pt_dico,mot); + printf("\nmot:%s\n",mot); + ajout_mot(((*ppt_dico)->alpha[mot[0]-'a']),mot,0); } return ; } -void free_arbre(struct dico **pt_dico){ - if (*pt_dico-> + +void free_arbre(struct arbre *pt_arbre){ + if (pt_arbre==NULL){ + return ; + } + for(int i=0;i<26;i++){ + free_arbre(pt_arbre->suite[i]); + } + free(pt_arbre); } -void affiche_dico(struct dico *dico){ - if(dico==NULL){ +void free_dico(struct dico *pt_dico){ + if (pt_dico==NULL){ return ; } for(int i=0;i<26;i++){ - affiche_arbre(dico->alpha[i]); + free_arbre(pt_dico->alpha[i]); } + free(pt_dico); + } void affiche_arbre(struct arbre *arbre){ if(arbre==NULL){ return ; } - printf("%c\n",arbre->val); + printf("%c:xxx\n",arbre->val); for(int i=0;i<26;i++){ affiche_arbre(arbre->suite[i]); } } +void affiche_dico(struct dico *dico){ + if(dico==NULL){ + return ; + } + printf("---------------------------------------\n"); + for(int i=0;i<26;i++){ + printf("%d:zzz",i); + affiche_arbre(dico->alpha[i]); + printf("\n"); + } + +} + int main (){ - Dico *mondico=malloc(sizeof(struct dico)); - charger_arbre("dicotest.txt",mondico); - - + FILE* fp = fopen("dicotest.txt","r"); //amelioration entrée + if(fp == NULL){ return EXIT_FAILURE;} //File is not readable + + struct dico *mondico=malloc(sizeof(struct dico)); + charger_arbre(fp,&mondico); + affiche_dico(mondico); + free(mondico); + fclose(fp); return 0; } -- libgit2 0.21.2