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
|
void splitcarac(struct node **tab_ptr_tree,wchar_t message[])
{
if(message[0]<'a' || message[0]>'z')return;
wchar_t *buffer;
|
76053da1
Thorsieger
update des fichiers
|
75
|
wchar_t *token = wcstok(message, L" ,?;.:/!*+\\\"()=«»", &buffer);
|
89b9e3f8
Thorsieger
découpage d'un texte
|
76
77
78
|
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
|
}
|
76053da1
Thorsieger
update des fichiers
|
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
/*Recherche dans le dictionnaire*/
int find_mot(struct node **tab_ptr_tree,wchar_t mot[],int size,int fl)
{
if(size==1 && tab_ptr_tree[fl]!=NULL)
{
if(tab_ptr_tree[fl]->fin==0)return 1;
else return 0;//vrais
}
if(size==1 && tab_ptr_tree[fl]==NULL)return 1;//faux
struct node *ptr_node = tab_ptr_tree[fl];
for(int i=1;i<size;i++)
{
if(ptr_node->nbr_fils==0)return 1;
for(int k=0;k<(ptr_node->nbr_fils);k++)
{
if(ptr_node->fils[k]->val==mot[i])
{
ptr_node=ptr_node->fils[k];
break;
}
else if(k+1==ptr_node->nbr_fils)return 1;
}
}
if(ptr_node->fin==0)return 1;
else return 0;
}
int find()
{
return 0;
}
|