Adloun

Compter sans déborder

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 1 — Le langage C

Énoncé

Écrire une fonction qui compte les occurrences d'un caractère dans une chaîne, avec sa spécification complète.

Corrigé


/* Renvoie le nombre d'occurrences de c dans la chaîne s.
   Précondition  : s est une chaîne valide, terminée par '\0'.
   Postcondition : le résultat est compris entre 0 et strlen(s). */
int occurrences(const char s[], char c) {
    assert(s != NULL);
    int compte = 0;
    /* INVARIANT : compte est le nombre d'occurrences de c dans s[0..i-1]. */
    for (int i = 0; s[i] != '\0'; i = i + 1) {
        if (s[i] == c) { compte = compte + 1; }
    }
    return compte;
}

Trois points de méthode. La boucle s'arrête sur la sentinelle et non sur une longueur calculée d'avance : un seul parcours, . Le paramètre est const — la fonction promet de ne rien modifier, et le compilateur le vérifie. Et l'invariant est écrit là où on peut le lire, juste au-dessus de la boucle.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.