/* Manipulation du dictionnaire */ int est_dans_dico(char *mot, arbre dico){ if((dico == NULL)||(dico->data > mot[0])) return 0; if(mot[0] == dico->data){ if(mot[0] == '\0') return 1; return est_dans_dico(mot+1, dico->gauche); } return est_dans_dico(mot, dico->droite); }
void verifie_mots(arbre dico){ char buffer[BUFFER_SIZE]; printf("Entrez les mots à vérifier. Terminez par une ligne vide (ctrl D ou .)\n"); while(readline(stdin, buffer)){ if((buffer[0]=='.')&&(buffer[1]=='\0')) break; printf("%s",buffer); if(est_dans_dico(buffer, dico)) printf(" est correct\n"); else printf(" n'est pas dans le dictionnaire\n"); } }
void Decompression(FILE* fichier_in){ int caractere_a_decompresser; int code_caractere; uint32_t bit_a_ecrire; dictionnaire dico = malloc(sizeof(dictionnaire)); int tableau_temporaire[Taille_tab]; //AMELIORATION POSSIBLE : Utiliser une succéssion de pointeur afin d'optimiser la place. char* sequence; int taille_sequence; int caractere_save; int code_seq=260; int taille_code=9; int present_dico; int i; init_dico(dico); initialise_tab_temp(tableau_temporaire); caractere_a_compresser = readChar(fichier_in); while (caractere_a_compresser != 256) { insere_dans_tab_temp(caractere_a_compresser, tableau_temporaire); sequence = concatene_caracteres_de_tab_temp(tableau_temporaire, &taille_sequence); printf("%s\n",sequence ); if(!est_dans_dico(sequence, taille_sequence, dico))//Si la sequence n'estpas dans le dico { printf("ajout de la séquence dans le dico\n"); ajout_dico(sequence, taille_sequence, dico, code_seq); code_seq++; caractere_save = exclusion_du_dernier_element(tableau_temporaire); taille_sequence = taille_sequence - 1; //La taille de la séquence a perdu un élément sequence = concatene_caracteres_de_tab_temp(tableau_temporaire, &taille_sequence); code_caractere = caract_to_code(sequence, taille_sequence, dico); //recherche code caractere dans dico bit_a_ecrire = int_to_uint32(code_caractere); printf("On code %d dans le fichier\n", code_caractere ); //printf("%#X\n", bit_a_ecrire); //tampon_ecriture(bit_a_ecrire, taille_code); restart(tableau_temporaire, caractere_save); caractere_a_compresser = caractere_save; } //else if (compression_fini == 1) /*&& tableau_temporaire[0] != -1*/ //{ //printf("%d\n", caractere_a_compresser); //printf("%d\n", compression_fini); //caractere_a_compresser = 256; //printf("%d\n", tableau_temporaire[0]); //printf("%d\n", code_caractere); //} else { caractere_a_compresser = readChar(fichier_in); if (caractere_a_compresser == 256) { sequence = concatene_caracteres_de_tab_temp(tableau_temporaire, &taille_sequence); code_caractere = caract_to_code (sequence, taille_sequence, dico); //recherche code caractere dans dico bit_a_ecrire = int_to_uint32(code_caractere); printf("On code %d dans le fichier\n", code_caractere ); } } } bit_a_ecrire = int_to_uint32(caractere_a_compresser); printf("On code %d dans le fichier\n", caractere_a_compresser ); //ecriture_sortie(bit_a_ecrire); //fonction a modifier //afficher(dico); }