#include #include #include typedef struct arbre{ char val; struct arbre *suite[26]; bool finmot; //1 si fin de mot }Arbre; typedef struct dico { Arbre *alpha[26]; }Dico; void arbre_vide(struct arbre ** pt_arbre) { *pt_arbre = NULL; } bool est_vide(struct arbre *arbre) { return arbre==NULL; } bool fin_de_mot(struct arbre *arbre) { return arbre->finmot; } void cons_dico(struct dico **ppt_dico,char val){ Arbre *monarbre=malloc(sizeof(struct arbre)); monarbre->val=val; monarbre->finmot=false; for(int i=0;i<26;i++){ monarbre->suite[i]=NULL; } (*ppt_dico)->alpha[val-'a']=monarbre; } void ini_dico(struct dico * pt_dico){ printf("ini_dico"); for(int i=0;i<26;i++){ cons_dico(&pt_dico,'a'+i); } } void ajout_mot(struct arbre **pt_arbre,char *mot, int i){ printf("%d",i); printf("%c",mot[i]); while(mot[i]!='\0'){ if (*pt_arbre==NULL){ printf("creation arbre\n"); 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; printf("%c\n",(*pt_arbre)->val); } i++; ajout_mot(pt_arbre,mot,i); } // (*pt_arbre)->finmot=true; // printf("true\n"); } void charger_arbre(FILE *fp, struct dico **ppt_dico) { char mot[20]; ini_dico(*ppt_dico); while (fscanf(fp, "%s", mot)!=EOF){ printf("\nmot:%s\n",mot); printf("%c\n",(*ppt_dico)->alpha[mot[0]-'a']->val); ajout_mot(&((*ppt_dico)->alpha[mot[0]-'a']),mot,0); } return ; } 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 free_dico(struct dico *pt_dico){ if (pt_dico==NULL){ return ; } for(int i=0;i<26;i++){ free_arbre(pt_dico->alpha[i]); free(pt_dico->alpha[i]); } free(pt_dico); } void affiche_arbre(struct arbre *arbre){ if(arbre==NULL){ return ; } printf("%c\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("%dmot:",i); affiche_arbre(dico->alpha[i]); printf("\n"); } } int main (){ 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; }