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.