d75f444a
pvernier
ajout de la desal...
|
1
2
3
4
5
|
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
|
c21ed069
tvieuble
correction projet...
|
6
|
#define A 256
|
d75f444a
pvernier
ajout de la desal...
|
7
8
9
10
11
12
13
14
15
16
17
|
struct node {
wchar_t lettre;
struct cell* listeFils;
};
struct cell {
struct node* arbre;
struct cell* arbreSuivant;
};
|
d75f444a
pvernier
ajout de la desal...
|
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
void ajout_tete(wchar_t elem, struct cell** pL) {
struct cell* p;
p = malloc(sizeof(struct cell));
p->arbre = malloc(sizeof(struct node));
p->arbre->listeFils = NULL;
p->arbre->lettre = elem;
p->arbreSuivant = *pL;
*pL = p;
}
struct cell ** insertion(wchar_t elem, struct cell** pL) {
if(((*pL) == NULL) || ((*pL)->arbre->lettre > elem)) {
ajout_tete(elem, pL);
return &(*pL)->arbre->listeFils;
}
else if((*pL)->arbre->lettre == elem) {
return &(*pL)->arbre->listeFils;
}
else {
return insertion(elem, &(*pL)->arbreSuivant);
}
}
|
e2bf24c0
tvieuble
push
|
41
42
|
void initialisation_tab_arbre(struct node tab[]) {
int i = 0;
|
c21ed069
tvieuble
correction projet...
|
43
|
for(wchar_t u = 'a'; u < A; u++) {
|
e2bf24c0
tvieuble
push
|
44
45
46
47
|
tab[i].lettre = u; //ajout lettres minuscules
tab[i].listeFils = NULL;
i++;
}
|
c21ed069
tvieuble
correction projet...
|
48
49
|
tab[i].lettre = '?';
tab[i+1].lettre = '!';
|
4c1aa780
tvieuble
projetfinalaccent2.c
|
50
|
tab[i+2].lettre = '\'';
|
c21ed069
tvieuble
correction projet...
|
51
52
53
|
for(int j = 0; j <= 2; j++) { //Ajout des caractères de ponctuation par défaut
tab[i+j].listeFils = NULL;
insertion('\0', &(tab[i+j].listeFils));
|
e2bf24c0
tvieuble
push
|
54
55
56
|
}
}
|
d75f444a
pvernier
ajout de la desal...
|
57
58
|
int indice_lettre(struct node tab_arbre_prcp[], wchar_t lettre)
{
|
4c1aa780
tvieuble
projetfinalaccent2.c
|
59
60
|
int i = 0;
while(i >= 0 && i < A){
|
d75f444a
pvernier
ajout de la desal...
|
61
62
63
64
65
|
if(lettre == tab_arbre_prcp[i].lettre ){
return i;
}
i++;
}
|
4c1aa780
tvieuble
projetfinalaccent2.c
|
66
|
return -1;
|
d75f444a
pvernier
ajout de la desal...
|
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
}
void remplir_dico(FILE* fd, struct node tab_arbre_prcp[]) {
struct cell** localisationArbre = NULL;
int cptmot = 0, indice = 0;
wchar_t motLu[50];
while(fwscanf(fd, L"%ls", motLu)==1) {
//wprintf(L"mot lu : %ls\n", motLu);
int estUneLettre = 1;
int i = 0;
cptmot += 1;
if((motLu[0] >= 'A') && (motLu[0] <= 'Z')) {
localisationArbre = &tab_arbre_prcp[motLu[0]-65].listeFils;
}
else if((motLu[0] >= 'a') && (motLu[0] <= 'z')) {
localisationArbre = &tab_arbre_prcp[motLu[0]-97].listeFils;
}
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
85
|
else if((motLu[0] < 'A') || (motLu[0] > 'z')) {
|
d75f444a
pvernier
ajout de la desal...
|
86
87
|
indice = indice_lettre(tab_arbre_prcp, motLu[0]);
localisationArbre = &tab_arbre_prcp[indice].listeFils;
|
4c1aa780
tvieuble
projetfinalaccent2.c
|
88
|
if(indice == -1) {
|
d75f444a
pvernier
ajout de la desal...
|
89
90
91
92
93
94
95
96
97
98
99
100
|
wprintf(L"Erreur remplissage dico : L'un des caracteres n'est pas une lettre\n");
wprintf(L"Mot : %ls incorrect\n", motLu);
estUneLettre = 0;
}
}
else {
wprintf(L"Erreur remplissage dico : L'un des caracteres n'est pas une lettre\n");
wprintf(L"Mot : %ls incorrect\n", motLu);
estUneLettre = 0;
}
while((motLu[i] != '\0') && (estUneLettre == 1)) {
i += 1;
|
d75f444a
pvernier
ajout de la desal...
|
101
102
103
104
105
106
107
108
|
localisationArbre = insertion(motLu[i], localisationArbre);
}
}
wprintf(L"\n");
fclose(fd);
wprintf(L"%d mots inseres dans le dictionnaire.\n", cptmot);
}
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
109
|
struct cell ** test_mot(wchar_t mot, struct cell** localisation, int* verif) {
|
d75f444a
pvernier
ajout de la desal...
|
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
if((*localisation == NULL) || (*localisation)->arbre->lettre > mot) {
*verif = 0;
return NULL;
}
if((*localisation)->arbre->lettre == mot) {
return &(*localisation)->arbre->listeFils;
}
else {
return test_mot(mot, &(*localisation)->arbreSuivant, verif);
}
}
void correction_txt(FILE* fd, struct node tab_arbre_prcp[]) {
struct cell** localisationArbre = NULL;
int verif;
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
126
|
int indice = 0, cptfaute = 0;
|
d75f444a
pvernier
ajout de la desal...
|
127
128
129
130
131
132
133
134
135
136
|
wchar_t motLu[50];
while(fwscanf(fd, L"%ls", motLu)==1) {
verif = 1;
int i = 0;
if((motLu[0] >= 'A') && (motLu[0] <= 'Z')) {
localisationArbre = &tab_arbre_prcp[motLu[0]-65].listeFils;
}
else if((motLu[0] >= 'a') && (motLu[0] <= 'z')) {
localisationArbre = &tab_arbre_prcp[motLu[0]-97].listeFils;
}
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
137
138
|
else if((motLu[0] < 'A') || (motLu[0] > 'z')) {
printf("jsuisla\n");
|
d75f444a
pvernier
ajout de la desal...
|
139
140
|
indice = indice_lettre(tab_arbre_prcp, motLu[0]);
localisationArbre = &tab_arbre_prcp[indice].listeFils;
|
4c1aa780
tvieuble
projetfinalaccent2.c
|
141
|
if(indice == -1) {
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
142
|
wprintf(L"Erreur correction txt : L'un des caracteres n'est pas une lettre\n");
|
d75f444a
pvernier
ajout de la desal...
|
143
144
145
146
147
148
149
150
151
|
verif = 0;
}
}
else {
wprintf(L"Erreur correction txt : L'un des caracteres n'est pas une lettre\n");
verif = 0;
}
while((verif == 1) && (motLu[i] != '\0')) {
i += 1;
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
152
|
if((motLu[i] == '.') || (motLu[i] == ',') || (motLu[i] == ';') || (motLu[i] == ':') || (motLu[i] == '!') || (motLu[i] == '?')) motLu[i] = '\0'; //prendre en compte les fins de phrase
|
d75f444a
pvernier
ajout de la desal...
|
153
154
|
localisationArbre = test_mot(motLu[i], localisationArbre, &verif);
}
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
155
156
157
158
|
if(verif == 0) {
wprintf(L"Mot %ls non present dans le dicitonnaire.\n", motLu);
cptfaute += 1;
}
|
d75f444a
pvernier
ajout de la desal...
|
159
|
}
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
160
|
printf("Le texte comporte %d faute(s)\n", cptfaute);
|
d75f444a
pvernier
ajout de la desal...
|
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
fclose(fd);
}
void correction_mot(struct node tab_arbre_prcp[]) {
struct cell** localisationArbre = NULL;
int verif;
int indice = 0;
wchar_t motLu[50];
wprintf(L"Entrez un mot ou une phrase a corriger : \n(0 pour quitter)\n");
while(wscanf(L"%ls", motLu)==1) {
if(motLu[0]=='0') return;
verif = 1;
int i = 0;
if((motLu[0] >= 'A') && (motLu[0] <= 'Z')) {
localisationArbre = &tab_arbre_prcp[motLu[0]-65].listeFils;
}
else if((motLu[0] >= 'a') && (motLu[0] <= 'z')) {
localisationArbre = &tab_arbre_prcp[motLu[0]-97].listeFils;
}
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
180
|
else if((motLu[0] < 'A') || (motLu[0] > 'z')) {
|
d75f444a
pvernier
ajout de la desal...
|
181
182
|
indice = indice_lettre(tab_arbre_prcp, motLu[0]);
localisationArbre = &tab_arbre_prcp[indice].listeFils;
|
4c1aa780
tvieuble
projetfinalaccent2.c
|
183
|
if(indice == -1) {
|
e2bf24c0
tvieuble
push
|
184
|
wprintf(L"Erreur correction mot : L'un des caracteres n'est pas une lettre\n");
|
d75f444a
pvernier
ajout de la desal...
|
185
186
187
188
189
190
191
192
193
|
verif = 0;
}
}
else {
wprintf(L"Erreur correction mot : L'un des caracteres n'est pas une lettre\n");
verif = 0;
}
while((verif == 1) && (motLu[i] != '\0')) {
i += 1;
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
194
|
if((motLu[i] == '.') || (motLu[i] == ',') || (motLu[i] == ';') || (motLu[i] == ':') || (motLu[i] == '!') || (motLu[i] == '?')) motLu[i] = '\0';
|
d75f444a
pvernier
ajout de la desal...
|
195
196
197
|
wprintf(L"lettre lue %d\n", motLu[i]);
localisationArbre = test_mot(motLu[i], localisationArbre, &verif);
}
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
198
199
200
|
if(verif == 0) {
wprintf(L"Mot : %ls non present dans le dicitonnaire.\n", motLu);
}
|
d75f444a
pvernier
ajout de la desal...
|
201
202
203
204
|
else wprintf(L"Mot : %ls correct\n", motLu);
}
}
|
d75f444a
pvernier
ajout de la desal...
|
205
206
|
void desalocationArbre(struct cell** pL) {
|
c21ed069
tvieuble
correction projet...
|
207
208
|
if ((*pL) == NULL) return;
|
d75f444a
pvernier
ajout de la desal...
|
209
210
|
desalocationArbre(&(*pL)-> arbreSuivant);
desalocationArbre(&(*pL)-> arbre -> listeFils);
|
d75f444a
pvernier
ajout de la desal...
|
211
212
213
214
215
216
217
|
free((*pL) -> arbre);
free(*pL);
}
void desalocationTableauArbre(struct node tab_arbre[]){
int i = 0;
for(wchar_t u = 'a'; u < A; u++) {
|
ee3fc0eb
tvieuble
Ajout caractères ...
|
218
|
desalocationArbre(&tab_arbre[i].listeFils);
|
d75f444a
pvernier
ajout de la desal...
|
219
220
221
222
223
224
225
226
227
228
229
|
i++;
}
}
int main(int argc, char* argv[]) {
setlocale(LC_ALL, "");
FILE* dico = NULL;
FILE* txt = NULL;
struct node tab_arbre[A];
|
d75f444a
pvernier
ajout de la desal...
|
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
if(argc>2) {
dico = fopen(argv[1], "r");
txt = fopen(argv[2], "r");
}
else {
dico = NULL;
txt = NULL;
}
if ((dico == NULL) || (txt == NULL)) {
wprintf(L"Erreur : il manque un ou plusieurs fichiers !\n");
return 1;
}
initialisation_tab_arbre(tab_arbre);
|
c21ed069
tvieuble
correction projet...
|
244
245
|
remplir_dico(dico, tab_arbre);
//for(int i = 0; i < A; i++) wprintf(L"%lc\n", tab_arbre[i].lettre);
|
d75f444a
pvernier
ajout de la desal...
|
246
247
248
249
|
correction_txt(txt, tab_arbre);
correction_mot(tab_arbre);
desalocationTableauArbre(tab_arbre);
|
e2bf24c0
tvieuble
push
|
250
|
printf("fini\n");
|
d75f444a
pvernier
ajout de la desal...
|
251
252
253
|
return 0;
}
|