diff --git a/doc.txt b/doc.txt new file mode 100644 index 0000000..aed6915 --- /dev/null +++ b/doc.txt @@ -0,0 +1 @@ +aspirateur chien. chienne, banane. \ No newline at end of file diff --git a/lib.txt b/lib.txt index 8eebdb3..cdb5742 100644 --- a/lib.txt +++ b/lib.txt @@ -3,3 +3,4 @@ banc bilan chien chienne + diff --git a/lib2.txt b/lib2.txt new file mode 100644 index 0000000..8eb9891 --- /dev/null +++ b/lib2.txt @@ -0,0 +1,11 @@ +bien +bon +bio +blanc +banc +banane +aspirateur +chaussette +chien +chienne +chiens \ No newline at end of file diff --git a/tree.c b/tree.c index 261c23c..7b68dd3 100644 --- a/tree.c +++ b/tree.c @@ -2,60 +2,129 @@ #include #include #define MAX 30 +#define NB_CARAC 26 +#define nb_car 5 typedef struct node* Node; typedef struct node { char letter; - Node next[26]; + Node next[NB_CARAC]; bool endWord; }node; -void mk_empty_tree(Node* Tree) +bool is_empty_tree(Node Tree) { - *Tree = NULL; + return(Tree==NULL); } -bool is_empty_tree(Node* Tree) +bool is_leaf(Node Tree) { - return(*Tree==NULL); + for(int i=0; inext[i] != NULL) + return false; + return true; } void init_tree(Node* Tree) { - if(is_empty_tree(Tree)) + if(is_empty_tree(*Tree)) { - *Tree = malloc(sizeof(Node)); + *Tree = malloc(sizeof(node)); (*Tree)->letter = '?'; (* Tree)->endWord = false; - for(int i=0; i<26; i++) + for(int i=0; inext[i] = NULL; } } -void add_in_tree(Node *Tree, char word[]) +void add_in_tree(Node Tree, char word[]) { - char letter = word[0]; int j=0; - while(letter != '/0') + Node Tree2 = Tree; + while(word[j] != '\0') { + if(is_leaf(Tree2)) + printf("empty\t"); char letter = word[j]; - if((*Tree)->next[letter-'a']!=NULL) - *Tree = (*Tree)->next[letter-'a']; + 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 = malloc(sizeof(node)); new->letter = letter; for(int i=0; i<26; i++) { new->next[i]=NULL; } - (*Tree)->next[letter-'a'] = new; + 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); } - (*Tree)->endWord = true; + } +} + +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) @@ -63,29 +132,87 @@ void read_lib(FILE* fp, Node* Tree) char word[MAX]; while(1) { - if(fscanf(fp, "%s", &word)!=1) - break; - add_in_tree(Tree, word); + 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) { - Node printedTree = Tree; - if(printedTree!=NULL) - printf("%c", printedTree->letter); - if(printedTree->next[index]==NULL) - print_tree(printedTree, index+1); + 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 - print_tree(printedTree->next[index], 0); + { + 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; - FILE* fp; - fp = fopen(argv[argc-1], "r"); - read_lib(fp, &Tree); - print_tree(Tree, 0); + 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