arbre.c 2.82 KB
#include "arbre.h"


// typedef struct arbre{
//     char val;
//     struct arbre *suite[TAILLE];
//     bool finmot; //1 si fin de mot
// }Arbre;
// 
// typedef struct dico {
//     Arbre *alpha[TAILLE];
// }Dico;



int calculcase(char c)
{
    if(c==39){
        return 26;
    }
    else if(c<97){
        return c-'A';
    }
    else {
    return c-'a';
    }
}

bool est_vide(struct arbre *arbre)
{
	return arbre==NULL;
}

bool fin_de_mot(struct arbre *arbre)
{
	return arbre->finmot;
}

void ini_dico(struct dico *pt_dico)
{
    printf("ini_dico\n");
    for(int i=0;i<TAILLE;i++){
        pt_dico->alpha[i]=NULL;        
    }
}
void creation_arbre(Arbre **ppt_arbre,char c)
{
    printf("creation arbre\n");
    Arbre *monarbre=malloc(sizeof(struct arbre));
    monarbre->val=c;
    monarbre->finmot=false;
    for(int j=0;j<TAILLE;j++){
        monarbre->suite[j]=NULL;     
    }
    *ppt_arbre=monarbre;
}
    

void ajout_mot(struct arbre **arbrecourant,char *mot,int i)
{

    printf("%s:length:%zu \n",mot,strlen(mot));
    
    if(mot[i]!='\0'){
        printf("\nlettre:%c; i=%d\n",mot[i],i);
        if (*arbrecourant==NULL){
            creation_arbre(arbrecourant,mot[i]);
        }
        i++;
        if(mot[i]!='\0'){
            (*arbrecourant)->finmot=true;
        }
        ajout_mot(&((*arbrecourant)->suite[calculcase(mot[i])]),mot,i);
    }

}

void charger_arbre(FILE *fp, struct dico **ppt_dico)
{   char mot[20];
    ini_dico(*ppt_dico);
    while (fscanf(fp, "%s", mot)==1){
        printf("mot:%s\n\n\n",mot);
        printf("\nlettre:%c\n",mot[0]);
        ajout_mot(&((*ppt_dico)->alpha[calculcase(mot[0])]),mot,0);
    }
    return ;
}


void free_arbre(struct arbre *pt_arbre)
{
   if (pt_arbre==NULL){
        return ;
    }
    for(int i=0;i<TAILLE;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<TAILLE;i++){
        free_arbre((pt_dico->alpha[i]));
    }

    free(pt_dico);
}

void affiche_arbre(struct arbre *arbre)
{
    if(arbre==NULL){
        return ;
    }
    printf("%c:",arbre->val);
    for(int i=0;i<TAILLE;i++){
        affiche_arbre(arbre->suite[i]);
    }
}

void affiche_dico(struct dico *dico)
{
    if(dico==NULL){
        return ;
    }
    printf("---------------------------------------\n");
    for(int i=0;i<TAILLE;i++){
        printf("%d:",i);
        affiche_arbre(dico->alpha[i]);
        printf("\n");
    }
   
}


// int main (){
//     FILE* fp = fopen("words-no-accents","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_dico(mondico);
//     fclose(fp);    
//     return 0;
// }