9cf06b18
mertz
debut_add_tree
|
1
|
#include "tree.h"
|
f7d9ccda
mertz
ajout_libtree
|
2
|
|
284154ca
Thorsieger
gestion des accents
|
3
|
void cons_tree(struct node ** ptr_tree, wchar_t val)
|
f7d9ccda
mertz
ajout_libtree
|
4
|
{
|
9cf06b18
mertz
debut_add_tree
|
5
6
7
8
9
10
|
*ptr_tree = malloc(sizeof(struct node));
(*ptr_tree)->val = val;
(*ptr_tree)->fin = 0;
(*ptr_tree)->nbr_fils=0;
(*ptr_tree)->fils = malloc(sizeof(struct node*));
(*ptr_tree)->fils[0]=NULL;
|
f7d9ccda
mertz
ajout_libtree
|
11
12
|
}
|
9cf06b18
mertz
debut_add_tree
|
13
14
15
16
|
void mk_empty_tree(struct node **ptr_tree)
{
*ptr_tree = NULL;
}
|
f7d9ccda
mertz
ajout_libtree
|
17
|
|
9cf06b18
mertz
debut_add_tree
|
18
19
20
21
|
int is_leaf(struct node *tree)
{
return tree->fin||tree->fils[0]==NULL;
}
|
f7d9ccda
mertz
ajout_libtree
|
22
|
|
284154ca
Thorsieger
gestion des accents
|
23
|
void add(struct node **tab_ptr_tree, wchar_t val[],int taille, int fl)
|
03168857
mertz
create tree op
|
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
{
if(tab_ptr_tree[fl]==NULL)cons_tree(&(tab_ptr_tree[fl]),val[0]+97);
Node* noeudtest = tab_ptr_tree[fl];
for(int i = 1;i<taille;i++)
{
int trouve = -1;
for(int j=0;j<noeudtest->nbr_fils;j++)
{
if(noeudtest->fils[j]->val==val[i])trouve=j;
}
if(trouve==-1)
{
//ajouter lettre
noeudtest->nbr_fils++;
noeudtest->fils = realloc(noeudtest->fils,(noeudtest->nbr_fils)*sizeof(struct node*));
cons_tree(&(noeudtest->fils[(noeudtest->nbr_fils)-1]),val[i]);
|
aeb78bdf
mertz
correction fin de...
|
40
|
trouve = noeudtest->nbr_fils-1;
|
03168857
mertz
create tree op
|
41
42
43
44
45
46
|
}
noeudtest = noeudtest->fils[trouve];//on jump au noeud suivant
}
noeudtest->fin = 1;
|
9cf06b18
mertz
debut_add_tree
|
47
|
}
|
f7d9ccda
mertz
ajout_libtree
|
48
|
|
284154ca
Thorsieger
gestion des accents
|
49
|
int size(wchar_t val[])
|
541fd894
mertz
on_avance_tree
|
50
51
52
53
54
55
56
57
58
|
{
int cpt = 0;
while(val[cpt]!='\0')
{
cpt++;
}
return cpt;
}
|
89b9e3f8
Thorsieger
découpage d'un texte
|
59
|
void toLowerCase(wchar_t mot[])
|
aeb78bdf
mertz
correction fin de...
|
60
|
{
|
89b9e3f8
Thorsieger
découpage d'un texte
|
61
|
for(int i=0;i<size(mot);i++)
|
aeb78bdf
mertz
correction fin de...
|
62
63
64
65
66
67
68
69
|
{
if(mot[i]<='Z' && mot[i]>='A')
{
mot[i]+=32;
}
}
}
|
89b9e3f8
Thorsieger
découpage d'un texte
|
70
71
72
73
74
75
76
77
78
|
void splitcarac(struct node **tab_ptr_tree,wchar_t message[])
{
if(message[0]<'a' || message[0]>'z')return;
wchar_t *buffer;
wchar_t *token = wcstok(message, L" ,?;.:/!*+\\\"()=", &buffer);
add(tab_ptr_tree,token,size(token),(int)message[0]-97);
if(buffer!=NULL)splitcarac(tab_ptr_tree,buffer);
}
|
541fd894
mertz
on_avance_tree
|
79
|
|
03168857
mertz
create tree op
|
80
|
void load_tree(FILE *fp, struct node **tab_ptr_tree)
|
9cf06b18
mertz
debut_add_tree
|
81
82
|
{
//fl (first letter)
|
284154ca
Thorsieger
gestion des accents
|
83
|
wchar_t val[50];
|
541fd894
mertz
on_avance_tree
|
84
|
|
284154ca
Thorsieger
gestion des accents
|
85
|
while(fwscanf(fp, L"%ls",val)==1)
|
541fd894
mertz
on_avance_tree
|
86
|
{
|
89b9e3f8
Thorsieger
découpage d'un texte
|
87
88
|
toLowerCase(val);
splitcarac(tab_ptr_tree,val);
|
541fd894
mertz
on_avance_tree
|
89
90
91
92
93
|
}
//On peut tester la bonne ou mauvaise terminaison de la lecture
if(feof(fp)) printf("Fin normal de lecture\n");
if(ferror(fp)) printf("ERREUR de lecture\n");
|
9cf06b18
mertz
debut_add_tree
|
94
|
}
|
f7d9ccda
mertz
ajout_libtree
|
95
|
|
7ab3be6b
Thorsieger
debut free
|
96
|
void free_tree(struct node *ptr_tree)
|
9cf06b18
mertz
debut_add_tree
|
97
|
{
|
131759ee
Thorsieger
fin free arbre
|
98
99
100
|
if(ptr_tree==NULL)return;
if(ptr_tree->nbr_fils==0){free(ptr_tree->fils);return;}
for(int i=(ptr_tree->nbr_fils)-1;i>=0;i--)
|
7ab3be6b
Thorsieger
debut free
|
101
|
{
|
131759ee
Thorsieger
fin free arbre
|
102
|
free_tree(ptr_tree->fils[i]);
|
7ab3be6b
Thorsieger
debut free
|
103
104
|
free(ptr_tree->fils[i]);
}
|
131759ee
Thorsieger
fin free arbre
|
105
|
free(ptr_tree->fils);
|
7ab3be6b
Thorsieger
debut free
|
106
107
108
109
110
111
112
113
114
|
}
void free_dico(struct node **tab_ptr_tree)
{
for(int i=0;i<26;i++)
{
if(tab_ptr_tree[i]!=NULL)
{
free_tree(tab_ptr_tree[i]);
|
131759ee
Thorsieger
fin free arbre
|
115
|
free(tab_ptr_tree[i]);
|
7ab3be6b
Thorsieger
debut free
|
116
117
|
}
}
|
9cf06b18
mertz
debut_add_tree
|
118
|
}
|