forked from menault/2026_TD1_DEV51_Qualite_Algo
opti 2
This commit is contained in:
+24
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user