#include #include #include #define MAX 30 #define NB_CARAC 26 #define nb_car 5 typedef struct node* Node; typedef struct node { char letter; Node next[NB_CARAC]; bool endWord; }node; bool is_empty_tree(Node Tree) { return(Tree==NULL); } bool is_leaf(Node Tree) { for(int i=0; inext[i] != NULL) return false; return true; } void init_tree(Node* Tree) { if(is_empty_tree(*Tree)) { *Tree = malloc(sizeof(node)); (*Tree)->letter = '?'; (* Tree)->endWord = false; for(int i=0; inext[i] = NULL; } } void add_in_tree(Node Tree, char word[]) { int j=0; Node Tree2 = Tree; while(word[j] != '\0') { if(is_leaf(Tree2)) printf("empty\t"); char letter = word[j]; if(Tree2->next[letter-'a']!=NULL) { Tree2 = Tree2->next[letter-'a']; printf("%c %d\t", letter, letter-'a'); printf("okA %d\n", j); } else { Node new = NULL; new = malloc(sizeof(node)); new->letter = letter; for(int i=0; i<26; i++) { new->next[i]=NULL; } Tree2->next[letter-'a'] = new; Tree2->endWord = false; Tree2=Tree2->next[letter-'a']; printf("%c %d\t", letter, letter-'a'); printf("okB %d\n", j); } j++; if(word[j]=='\0') Tree2->endWord = true; } printf("ok\n"); } bool is_end_caract(char letter) { int endCaract[nb_car] = {0, 44, 45, 46, 47}; // a remplir for(int i=0; inext[letter-'a']!=NULL) { ind++; Tree2 = Tree2->next[letter-'a']; } else { printf("mot : %s erreur :%c %d \n", word, word[ind], word[ind]); (*error)++; ind = max_index(word); } } } void read_txt(FILE* fp, Node* Tree, int* error) { char word[MAX]; while(1) { if(fscanf(fp, "%s", word)!=1) return; scan_word(*Tree, word, error); } } void read_lib(FILE* fp, Node* Tree) { char word[MAX]; while(1) { if(fscanf(fp, "%s", word)!=1) return; printf("--%s--\n", word); //fflush(stdout); add_in_tree(*Tree, word); } } void print_tree(Node Tree, int index) { if(is_empty_tree(Tree)) return; Node cpTree = NULL; cpTree = Tree; if(cpTree->next[index]==NULL && index<26) { print_tree(cpTree, index+1); } else if(index == 26) { return; } else { printf("%c\n", (cpTree->next[index])->letter); if((cpTree->next[index])->endWord) { printf("fin\n"); //print_tree(cpTree, 0); return; } print_tree(cpTree->next[index], 0); } } int find_index(Node tree) { Node cpTree = tree; int index = 0; while(cpTree->next[index]==NULL && index < NB_CARAC) index++; return index; } void print_first(Node Tree) { Node cpTree = Tree; int index = 0; while(!is_leaf(cpTree)) { index = find_index(cpTree); printf("%c\n", (cpTree->next[index])->letter); cpTree=cpTree->next[index]; } } int main(int argc, char *argv[]) { Node tree = NULL; int error = 0; FILE* fp_lib; FILE* fp_txt; fp_lib = fopen(argv[argc-2], "r"); fp_txt = fopen(argv[argc-1], "r"); init_tree(&tree); read_lib(fp_lib, &tree); read_txt(fp_txt, &tree, &error); printf("%p\n", tree); print_first(tree); printf("\n"); print_tree(tree, 0); printf("erreurs : %d\n", error); int endCaract[nb_car] = {0, 44, 45, 46, 47}; // a remplir for(int i=0; i