Adloun

informatique (MP2I/MPI) · Chapitre 1 · Exercice de TD

Compter sans déborder

Le langage C · niveau 2

É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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre