diff --git a/dictionnaire.c b/dictionnaire.c new file mode 100644 index 0000000..80ea42a --- /dev/null +++ b/dictionnaire.c @@ -0,0 +1,118 @@ + +#include +#include +#include +#include +#include + + +Noeud *racine; + +long fileSize; + + +unsigned int nbr_mots; + + +Noeud *reserve_noeuds; + + +bool appartient(const char *mot) +{ + + Noeud *trav = NULL; + + + trav = racine; + + + int i = 0; + + + while (mot[i] != '\0') { + + char c = tolower(mot[i]); + + if (isalpha(c)) { + + if (trav->enfants[c - 'a'] == NULL) { + return false; + } + trav = trav->enfants[c - 'a']; + } + i++; + } + return trav->mot_fini; +} + +bool charger_dict(const char *dictionary) +{ + + FILE *dict = fopen(dictionary, "rb"); + + if (dict == false) { + printf("Could not open this dictionary (dictionary.c file)"); + return false; + } + + fseek(dict, 0, SEEK_END); + fileSize = ftell(dict); + + fseek(dict, 0, SEEK_SET); + + reserve_noeuds = calloc((fileSize), sizeof(Noeud)); + + Noeud *nextFreeNode = reserve_noeuds; + + char *buffer = malloc(fileSize + 1); + fread(buffer, 1, fileSize, dict); + + buffer[fileSize] = '\0'; + + racine = nextFreeNode + 1; + + Noeud *trav = NULL; + + char *words = buffer; + + nbr_mots = 0; + + while (*words) { + + trav = racine; + + for (; *words != '\n' && *words; words++) { + + else { + if (trav->enfants[*words - 'a'] == NULL) { + trav->enfants[*words - 'a'] = nextFreeNode++; + } + + trav = trav->enfants[*words - 'a']; + } + } + + trav->mot_fini = true; + nbr_mots++; + + if (*words == '\n') { + words++; + } + } + + fclose(dict); + free(buffer); + + return true; +} + +unsigned int taille() +{ + return nbr_mots; +} + +bool decharger() +{ + free(reserve_noeuds); + return true; +} -- libgit2 0.21.2