This commit is contained in:
2026-10-07 12:05:12 +02:00
parent 5f9c5eec33
commit 7ab243f1d6
3 changed files with 197 additions and 175 deletions
+24 -4
View File
@@ -228,10 +228,30 @@ typedef struct {
int longueur_mot;
} Entree;
int est_mot_vide(const char *mot)
/* Groupes par longueur et première lettre ; indices + 1, zéro = fin. */
int est_mot_vide(const char *mot, int taille)
{
for (int i = 0; i < NB_MOTS_VIDES; i++) {
if (egales(mot, MOTS_VIDES[i]))
static int groupes[TAILLE_MOT][26];
static int suivants[NB_MOTS_VIDES];
static int initialise = 0;
if (!initialise) {
for (int i = 0; i < NB_MOTS_VIDES; i++) {
int n = longueur(MOTS_VIDES[i]);
int lettre = MOTS_VIDES[i][0] - 'a';
if (n > 0 && n < TAILLE_MOT && lettre >= 0 && lettre < 26) {
suivants[i] = groupes[n][lettre];
groupes[n][lettre] = i + 1;
}
}
initialise = 1;
}
if (taille <= 0 || taille >= TAILLE_MOT || mot[0] < 'a' || mot[0] > 'z')
return 0;
for (int indice = groupes[taille][mot[0] - 'a']; indice != 0;
indice = suivants[indice - 1]) {
if (egales(mot, MOTS_VIDES[indice - 1]))
return 1;
}
return 0;
@@ -303,7 +323,7 @@ void compter_mots_ligne(Entree *table, int *nb_entrees, const char *ligne,
mot[k] = '\0';
if (k > 0) {
(*nb_mots_total)++;
if (!est_mot_vide(mot))
if (!est_mot_vide(mot, k))
compter_mot(table, nb_entrees, mot, k);
}
}