Commit 0f6db57b023ee867178fa140bb269ad430fe5041

Authored by Thorsieger
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
... ...