#include "classeur.h" #include #include #include void clas_initialiser (classeur c) { c[0][0] = '\0'; } size_t clas_cardinal (classeur c) { size_t i; for (i = 0; c[i][0] != '\0'; i++) ; return i; } static size_t clas_index (classeur c, element e) { size_t i; for (i = 0; c[i][0] != '\0' && strcoll (e, c[i]) >= 0; i++) ; return i; } void clas_ajouter_element (classeur c, element e) { size_t i, card; size_t emplacement; assert (e[0] != '\0'); emplacement = clas_index (c, e); for (card = emplacement; c[card][0] != '\0'; card++) ; assert (card < CLAS_NB_ELEMENTS); for (i = card + 1; i > emplacement; i--) strcpy (c[i], c[i - 1]); strcpy (c[emplacement], e); } int est_facteur_gauche (char facteur[], char mot[]) { size_t i; for (i = 0; facteur[i] == mot[i] && mot[i] != '\0'; i++) ; return facteur[i] == '\0'; } size_t clas_supprimer_element (classeur c, char debut[]) // A remarquer : // - si debut est la chaine vide alors il s'agit de supprimer // tous les éléments // - comme le tableau est trié lexicographiquement les facteurs gauches // de debut sont consécutifs { size_t i; if (debut[0] == '\0') { size_t card = clas_cardinal (c); clas_initialiser (c); return card; } for (i = 0; c[i][0] != '\0' && !est_facteur_gauche (debut, c[i]); i++) ; if (c[i][0] == '\0') return 0; { size_t nb_suppressions = 1; while (est_facteur_gauche (debut, c[i + nb_suppressions])) nb_suppressions++; do { strcpy (c[i], c[i + nb_suppressions]); i++; } while (c[i - 1][0] != '\0'); return nb_suppressions; } }