diff --git a/projetfinalwchar_t.c b/projetfinalwchar_t.c deleted file mode 100644 index 924c079..0000000 --- a/projetfinalwchar_t.c +++ /dev/null @@ -1,342 +0,0 @@ -#include -#include -#include -#include - -#define A 26 - -struct node { - wchar_t lettre; - struct cell* listeFils; -}; - -struct cell { - struct node* arbre; - struct cell* arbreSuivant; -}; - -void lien_listeFils(struct cell** pL) { - struct cell* p; - p = malloc(sizeof(struct cell)); - - (*pL)->arbre->listeFils = p; -} - -void initialisation_tab_arbre(struct node tab[]) { - for(int i = 0; i < A; i++) { - tab[i].lettre = 97+i; //ajout lettres minuscules - tab[i].listeFils = NULL; - } -} - -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); - } -} - -wchar_t conversion_accent(wchar_t lettre) { // Conversion Unicode -> ASCII 256 - switch(lettre) { - case 192 : //À - lettre = 182; - break; - case 193 : //Á - lettre = 181; - break; - case 194 : // - lettre = 182; - break; - case 198 : //Æ - lettre = 146; - break; - case 199 : //Ç - lettre = 128; - break; - case 200 : //È - lettre = 212; - break; - case 201 : //É - lettre = 144; - break; - case 202 : //Ê - lettre = 210; - break; - case 203 : //Ë - lettre = 211; - break; - case 204 : //Ì - lettre = 141; - break; - case 205 : //Í - lettre = 214; - break; - case 206 : //Î - lettre = 215; - break; - case 207 : //Ï - lettre = 216; - break; - case 209 : //Ñ - lettre = 165; - break; - case 210 : //Ò - lettre = 227; - break; - case 211 : //Ó - lettre = 224; - break; - case 212 : //Ô - lettre = 226; - break; - /* case 140 : //Œ - lettre = - break;*/ - case 217 : //Ù - lettre = 235; - break; - case 218 : //Ú - lettre = 233; - break; - case 219 : //Û - lettre = 234; - break; - case 220 : //Ü - lettre = 154; - break; - case 221 : //Ý - lettre = 237; - break; - /*case 159 : //Ÿ - lettre = - break;*/ - case 224 : //à - lettre = 233; - break; - case 225 : //á - lettre = 160; - break; - case 226 : //â - lettre = 131; - break; - case 230 : //æ - lettre = 145; - break; - case 231 : //ç - lettre = 135; - break; - case 232 : //è - lettre = 138; - break; - case 233 : //é - lettre = 130; - break; - case 234 : //ê - lettre = 136; - break; - case 235 : //ë - lettre = 137; - break; - case 236 : //ì - lettre = 141; - break; - case 237 : //í - lettre = 161; - break; - case 238 : //î - lettre = 140; - break; - case 239 : //ï - lettre = 139; - break; - case 241 : //ñ - lettre = 164; - break; - case 242 : //ò - lettre = 149; - break; - case 243 : //ó - lettre = 162; - break; - case 244 : //ô - lettre = 147; - break; - /*case 156 : //œ - lettre = - break;*/ - case 249 : //ù - lettre = 151; - break; - case 250 : //ú - lettre = 163; - break; - case 251 : //û - lettre = 150; - break; - /*case 252 : //ü - lettre = - break;*/ - case 253 : //ý - lettre = 263; - break; - case 255 : //ÿ - lettre = 152; - break; - default : - break; - } - return lettre; -} - -void remplir_dico(FILE* fd, struct node tab_arbre_prcp[]) { - - struct cell** localisationArbre = NULL; - int cptmot = 0; - wchar_t motLu[50]; - while(fwscanf(fd, L"%ls", motLu)==1) { - wprintf(L"mot lu : %ls\n", motLu); - int wchar_tEstUneLettre = 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; - } - else { - wprintf(L"Erreur remplissage dico : L'un des caracteres n'est pas une lettre\n"); - wprintf(L"Mot : %ls incorrect\n", motLu); - wchar_tEstUneLettre = 0; - } - while((motLu[i] != '\0') && (wchar_tEstUneLettre == 1)) { - i += 1; - wprintf(L"lettre lue %ld\n", motLu[i]); - if(motLu[i] > 127) {motLu[i] = conversion_accent(motLu[i]); - wprintf(L"lettre lue apres convversion : %ld\n", motLu[i]);} - localisationArbre = insertion(motLu[i], localisationArbre); - } - wprintf(L"mot lu 2: %ls\n", motLu); - } - wprintf(L"\n"); - fclose(fd); - wprintf(L"%d mots inseres dans le dictionnaire.\n", cptmot); -} - -struct cell** test_mot(wchar_t mot, struct cell** localisation, int* verif) { - - 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; - wchar_t motLu[50]; - while(fwscanf(fd, L"%ls", motLu)==1) { - wprintf(L"mot lu : %ls\n", motLu); - 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; - } - 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; - if(motLu[i] > 127) {motLu[i] = conversion_accent(motLu[i]); - wprintf(L"mot lu 2 : %ls\n", motLu);} - localisationArbre = test_mot(motLu[i], localisationArbre, &verif); - wprintf(L"lettre lue %ld\n", motLu[i]); - } - wprintf(L"\n"); - if(verif == 0) wprintf(L"Mot %ls non present dans le dicitonnaire.\n", motLu); - - } - fclose(fd); -} - -void correction_mot(struct node tab_arbre_prcp[]) { - struct cell** localisationArbre = NULL; - int verif; - 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; - } - else { - wprintf(L"Erreur correction mot : L'un des caract%lcres n'est pas une lettre\n", 130); - verif = 0; - } - while((verif == 1) && (motLu[i] != '\0')) { - i += 1; - wprintf(L"lettre lue %ld\n", motLu[i]); - localisationArbre = test_mot(motLu[i], localisationArbre, &verif); - } - if(verif == 0) wprintf(L"Mot : %ls non present dans le dicitonnaire.\n", motLu); - else wprintf(L"Mot : %ls correct\n", motLu); - } -} - - -int main(int argc, char* argv[]) { - - FILE* dico = NULL; - FILE* txt = NULL; - struct node tab_arbre[A]; - - 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); - remplir_dico(dico, tab_arbre); //on suppose qu'il n'y a pas d'accents dans le dictionnaire - correction_txt(txt, tab_arbre); - correction_mot(tab_arbre); - - return 0; -} -- libgit2 0.21.2