Commit 0f6db57b023ee867178fa140bb269ad430fe5041
1 parent
76053da1
gestion des accents en début de mot + calcul des erreurs dans un fichier
Showing
5 changed files
with
149 additions
and
71 deletions
Show diff stats
american-english
... | ... | @@ -99152,20 +99152,20 @@ zwieback's |
99152 | 99152 | zygote |
99153 | 99153 | zygote's |
99154 | 99154 | zygotes |
99155 | -zÅngström | |
99156 | -zéclair | |
99157 | -zéclair's | |
99158 | -zéclairs | |
99159 | -zéclat | |
99160 | -zéclat's | |
99161 | -zélan | |
99162 | -zélan's | |
99163 | -zémigré | |
99164 | -zémigré's | |
99165 | -zémigrés | |
99166 | -zépée | |
99167 | -zépée's | |
99168 | -zépées | |
99169 | -zétude | |
99170 | -zétude's | |
99171 | -zétudes | |
99155 | +Ångström | |
99156 | +éclair | |
99157 | +éclair's | |
99158 | +éclairs | |
99159 | +éclat | |
99160 | +éclat's | |
99161 | +élan | |
99162 | +élan's | |
99163 | +émigré | |
99164 | +émigré's | |
99165 | +émigrés | |
99166 | +épée | |
99167 | +épée's | |
99168 | +épées | |
99169 | +étude | |
99170 | +étude's | |
99171 | +études | ... | ... |
dico_test
1 | -Il est l'acteur-phare de l'émission télévisée humoristique Serviteur du peuple. Sans aucune expérience politique, il se présente pour le parti homonyme à l’élection présidentielle de 2019, qu'il remporte au second tour avec 73,2 % des voix, face au chef de l'État sortant, Petro Porochenko. À 41 ans, il est le plus jeune président élu en Ukraine. | |
2 | -test | |
3 | 1 | \ No newline at end of file |
2 | +Although testing can determine the correctness of software under the assumption of some specific hypotheses (see the hierarchy of testing difficulty below), testing cannot identify all the defects within the software. Instead, it furnishes a criticism or comparison that compares the state and behavior of the product against test oracles principles or mechanisms by which someone might recognize a problem. These oracles may include (but are not limited to) specifications, contracts, comparable products, past versions of the same product, inferences about intended or expected purpose, user or customer expectations, relevant standards, applicable laws, or other criteria. 111 | |
4 | 3 | \ No newline at end of file | ... | ... |
... | ... | @@ -3,33 +3,32 @@ |
3 | 3 | int main() |
4 | 4 | { |
5 | 5 | setlocale(LC_ALL, ""); |
6 | - //FILE* fp = fopen("american-english","r"); | |
7 | - FILE* fp = fopen("dico_test","r"); | |
6 | + FILE* fp = fopen("american-english","r"); | |
7 | + FILE* fp2 = fopen("dico_test","r"); | |
8 | 8 | |
9 | 9 | if(fp == NULL) return 1 ; //File is not readable |
10 | 10 | |
11 | - struct node* tab[26]; | |
12 | - for(int i=0;i<26;i++) | |
13 | - { | |
14 | - tab[i]=NULL; | |
15 | - } | |
16 | - | |
17 | - //supprimer la case avant de load | |
18 | - load_tree(fp,tab);//chargement de l'arbre | |
19 | - | |
11 | + dico Dico; | |
12 | + | |
13 | + init_dico(&Dico); | |
14 | + load_dico(fp,&Dico);//chargement de l'arbre | |
15 | + | |
20 | 16 | printf("Loading done!\n"); |
21 | 17 | |
22 | - wchar_t mot[50]; | |
23 | - int taille; | |
18 | + | |
19 | + int result = find_erreur(Dico,fp2); | |
20 | + printf("%d\n",result); | |
21 | + | |
22 | + /*wchar_t mot[50]; | |
24 | 23 | wscanf(L"%ls",mot); |
25 | - wscanf(L"%d",&taille); | |
26 | 24 | int result; |
27 | - result = find_mot(tab,mot,taille,(int)mot[0]-97); | |
28 | - printf("%d\n",result); | |
25 | + result = find_mot(Dico,mot); | |
26 | + printf("%d\n",result);*/ | |
29 | 27 | |
30 | 28 | |
31 | - free_dico(tab);//libérer la mémoire | |
29 | + free_dico(Dico);//libérer la mémoire | |
32 | 30 | fclose(fp); |
31 | + fclose(fp2); | |
33 | 32 | |
34 | 33 | printf("Fin du programme\n"); |
35 | 34 | ... | ... |
... | ... | @@ -10,14 +10,19 @@ void cons_tree(struct node ** ptr_tree, wchar_t val) |
10 | 10 | (*ptr_tree)->fils[0]=NULL; |
11 | 11 | } |
12 | 12 | |
13 | -void mk_empty_tree(struct node **ptr_tree) | |
13 | +void mk_empty_tree(dico *Dico) | |
14 | 14 | { |
15 | - *ptr_tree = NULL; | |
15 | + for(int i = 0; i < Dico->taille; i++) | |
16 | + { | |
17 | + Dico->tab_ptr_tree[i] = NULL; | |
18 | + } | |
16 | 19 | } |
17 | 20 | |
18 | -int is_leaf(struct node *tree) | |
21 | +void init_dico(dico *Dico) | |
19 | 22 | { |
20 | - return tree->fin||tree->fils[0]==NULL; | |
23 | + Dico->taille = 26; | |
24 | + Dico->tab_ptr_tree = malloc(Dico->taille*sizeof(struct node*)); | |
25 | + mk_empty_tree(Dico); | |
21 | 26 | } |
22 | 27 | |
23 | 28 | void add(struct node **tab_ptr_tree, wchar_t val[],int taille, int fl) |
... | ... | @@ -60,32 +65,49 @@ void toLowerCase(wchar_t mot[]) |
60 | 65 | { |
61 | 66 | for(int i=0;i<size(mot);i++) |
62 | 67 | { |
63 | - if(mot[i]<='Z' && mot[i]>='A') | |
64 | - { | |
65 | - mot[i]+=32; | |
66 | - } | |
68 | + if((mot[i]<='Z' && mot[i]>='A') || (mot[i]>=192 && mot[i]<=214) || (mot[i]>=216 && mot[i]<=222))mot[i]+=32; | |
69 | + else if(mot[i]==138|| mot[i]==140 || mot[i]==142) mot[i]+=16; | |
70 | + else if(mot[i]==159) mot[i]+=96; | |
67 | 71 | } |
68 | 72 | } |
69 | 73 | |
70 | -void splitcarac(struct node **tab_ptr_tree,wchar_t message[]) | |
74 | +void splitcarac(dico *Dico,wchar_t message[]) | |
71 | 75 | { |
72 | - if(message[0]<'a' || message[0]>'z')return; | |
73 | - | |
76 | + int first_letter =-1; | |
77 | + if(message[0]>='a' && message[0]<='z') | |
78 | + { | |
79 | + first_letter = (int)message[0]-97; | |
80 | + } | |
81 | + else | |
82 | + { | |
83 | + for(int i = 26; i < Dico->taille; i++) | |
84 | + { | |
85 | + if(Dico->tab_ptr_tree[i]->val == message[0]){first_letter = i;break;} | |
86 | + } | |
87 | + if(first_letter == -1) | |
88 | + { | |
89 | + first_letter = Dico->taille; | |
90 | + Dico->taille++; | |
91 | + Dico->tab_ptr_tree = realloc(Dico->tab_ptr_tree,(Dico->taille)*sizeof(struct node*)); | |
92 | + Dico->tab_ptr_tree[first_letter] = NULL; | |
93 | + cons_tree(&(Dico->tab_ptr_tree[first_letter]),message[0]); | |
94 | + } | |
95 | + } | |
96 | + | |
74 | 97 | wchar_t *buffer; |
75 | 98 | wchar_t *token = wcstok(message, L" ,?;.:/!*+\\\"()=«»", &buffer); |
76 | - add(tab_ptr_tree,token,size(token),(int)message[0]-97); | |
77 | - if(buffer!=NULL)splitcarac(tab_ptr_tree,buffer); | |
99 | + add(Dico->tab_ptr_tree,token,size(token),first_letter); | |
100 | + if(buffer!=NULL)splitcarac(Dico,buffer); | |
78 | 101 | } |
79 | 102 | |
80 | -void load_tree(FILE *fp, struct node **tab_ptr_tree) | |
103 | +void load_dico(FILE *fp, dico *Dico) | |
81 | 104 | { |
82 | - //fl (first letter) | |
83 | 105 | wchar_t val[50]; |
84 | 106 | |
85 | 107 | while(fwscanf(fp, L"%ls",val)==1) |
86 | 108 | { |
87 | 109 | toLowerCase(val); |
88 | - splitcarac(tab_ptr_tree,val); | |
110 | + splitcarac(Dico,val); | |
89 | 111 | } |
90 | 112 | |
91 | 113 | //On peut tester la bonne ou mauvaise terminaison de la lecture |
... | ... | @@ -105,30 +127,51 @@ void free_tree(struct node *ptr_tree) |
105 | 127 | free(ptr_tree->fils); |
106 | 128 | } |
107 | 129 | |
108 | -void free_dico(struct node **tab_ptr_tree) | |
130 | +void free_dico(dico Dico) | |
109 | 131 | { |
110 | - for(int i=0;i<26;i++) | |
132 | + for(int i=0;i<Dico.taille;i++) | |
111 | 133 | { |
112 | - if(tab_ptr_tree[i]!=NULL) | |
134 | + if(Dico.tab_ptr_tree[i]!=NULL) | |
113 | 135 | { |
114 | - free_tree(tab_ptr_tree[i]); | |
115 | - free(tab_ptr_tree[i]); | |
136 | + free_tree(Dico.tab_ptr_tree[i]); | |
137 | + free(Dico.tab_ptr_tree[i]); | |
116 | 138 | } |
117 | 139 | } |
140 | + free(Dico.tab_ptr_tree); | |
118 | 141 | } |
119 | 142 | |
120 | 143 | /*Recherche dans le dictionnaire*/ |
121 | -int find_mot(struct node **tab_ptr_tree,wchar_t mot[],int size,int fl) | |
144 | +int find_mot(dico Dico,wchar_t mot[]) | |
122 | 145 | { |
123 | - if(size==1 && tab_ptr_tree[fl]!=NULL) | |
146 | + if (mot==NULL) { | |
147 | + return 0; | |
148 | + } | |
149 | + if(mot[0]>='0' && mot[0]<='9')return 0; | |
150 | + | |
151 | + int fl =-1; | |
152 | + if(mot[0]>='a' && mot[0]<='z') | |
153 | + { | |
154 | + fl = (int)mot[0]-97; | |
155 | + } | |
156 | + else | |
124 | 157 | { |
125 | - if(tab_ptr_tree[fl]->fin==0)return 1; | |
158 | + for(int i = 26; i < Dico.taille; i++) | |
159 | + { | |
160 | + if(Dico.tab_ptr_tree[i]->val == mot[0]){fl = i;break;} | |
161 | + } | |
162 | + if(fl == -1)return 1; | |
163 | + } | |
164 | + | |
165 | + int taille = size(mot); | |
166 | + if(taille==1 && Dico.tab_ptr_tree[fl]!=NULL) | |
167 | + { | |
168 | + if(Dico.tab_ptr_tree[fl]->fin==0)return 1; | |
126 | 169 | else return 0;//vrais |
127 | 170 | } |
128 | - if(size==1 && tab_ptr_tree[fl]==NULL)return 1;//faux | |
171 | + if(taille==1 && Dico.tab_ptr_tree[fl]==NULL)return 1;//faux | |
129 | 172 | |
130 | - struct node *ptr_node = tab_ptr_tree[fl]; | |
131 | - for(int i=1;i<size;i++) | |
173 | + struct node *ptr_node = Dico.tab_ptr_tree[fl]; | |
174 | + for(int i=1;i<taille;i++) | |
132 | 175 | { |
133 | 176 | if(ptr_node->nbr_fils==0)return 1; |
134 | 177 | for(int k=0;k<(ptr_node->nbr_fils);k++) |
... | ... | @@ -146,7 +189,31 @@ int find_mot(struct node **tab_ptr_tree,wchar_t mot[],int size,int fl) |
146 | 189 | else return 0; |
147 | 190 | } |
148 | 191 | |
149 | -int find() | |
192 | +int find_erreur(dico Dico, FILE *fp) | |
150 | 193 | { |
151 | - return 0; | |
194 | + wchar_t val[5000]; | |
195 | + int cpt_erreur =0; | |
196 | + | |
197 | + while(fwscanf(fp, L"%ls",val)==1) | |
198 | + { | |
199 | + toLowerCase(val); | |
200 | + cpt_erreur += split_text(Dico,val); | |
201 | + } | |
202 | + | |
203 | + //On peut tester la bonne ou mauvaise terminaison de la lecture | |
204 | + if(feof(fp)) printf("Fin normal de lecture\n"); | |
205 | + if(ferror(fp)) printf("ERREUR de lecture\n"); | |
206 | + | |
207 | + return cpt_erreur; | |
152 | 208 | } |
209 | + | |
210 | +int split_text(dico Dico,wchar_t message[]) | |
211 | +{ | |
212 | + if(message[0] == 0)return 0; | |
213 | + wchar_t *buffer; | |
214 | + wchar_t *token = wcstok(message, L" ,?;.:/!*+\\\"()=«»", &buffer); | |
215 | + int err = find_mot(Dico,token); | |
216 | + if(buffer!=NULL)err += split_text(Dico,buffer); | |
217 | + | |
218 | + return err; | |
219 | +} | |
153 | 220 | \ No newline at end of file | ... | ... |
... | ... | @@ -10,20 +10,33 @@ typedef struct node { |
10 | 10 | struct node** fils; |
11 | 11 | }Node, *PtNode, *Tree; |
12 | 12 | |
13 | +typedef struct dico { | |
14 | + struct node** tab_ptr_tree; | |
15 | + int taille; | |
16 | +}dico; | |
17 | + | |
13 | 18 | void cons_tree(struct node **, wchar_t); |
14 | 19 | |
15 | -void mk_empty_tree(struct node **); | |
20 | +void mk_empty_tree(dico*); | |
16 | 21 | |
17 | -int is_leaf(struct node *); | |
22 | +void init_dico(dico*); | |
18 | 23 | |
19 | 24 | void add(struct node **, wchar_t* ,int ,int); |
20 | 25 | |
21 | -void load_tree(FILE *, struct node **); | |
26 | +int size(wchar_t*); | |
27 | + | |
28 | +void toLowerCase(wchar_t*); | |
29 | + | |
30 | +void splitcarac(dico*,wchar_t*); | |
31 | + | |
32 | +void load_dico(FILE *, dico*); | |
22 | 33 | |
23 | 34 | void free_tree(struct node *); |
24 | 35 | |
25 | -void free_dico(struct node **); | |
36 | +void free_dico(dico); | |
37 | + | |
38 | +int find_erreur(dico,FILE*); | |
26 | 39 | |
27 | -int find(); | |
40 | +int find_mot(dico,wchar_t*); | |
28 | 41 | |
29 | -int find_mot(struct node **,wchar_t*,int,int); | |
30 | 42 | \ No newline at end of file |
43 | +int split_text(dico,wchar_t*); | |
31 | 44 | \ No newline at end of file | ... | ... |