OCaml (option informatique) · Chapitre 6 · Exercice de TD
Ordre lexicographique
Caractères et chaînes de caractères · niveau 2
Énoncé
Sans utiliser < sur les chaînes, écrire avant s1 s2 qui teste si s1 précède s2 dans l'ordre du dictionnaire, en comparant caractère par caractère.
Corrigé
let avant s1 s2 =
let n1 = String.length s1 and n2 = String.length s2 in
let i = ref 0 in
while !i < n1 && !i < n2 && s1.[!i] = s2.[!i] do
i := !i + 1
done;
if !i = n1 then !i < n2 (* s1 épuisée : préfixe (ou égale) *)
else if !i = n2 then false (* s2 épuisée la première : s2 < s1 *)
else s1.[!i] < s2.[!i] (* premier caractère qui diffère *)
On avance tant que les caractères coïncident, puis on tranche : si s1 est épuisée, elle précède s2 sauf si elles sont égales ; sinon on compare le premier caractère distinct. C'est exactement ce que fait < sur les chaînes.
Exercices semblables
- Palindrome corrigé
- Somme des chiffres d'une chaîne corrigé
- Conversions corrigé
- Compter les mots corrigé
- Répéter une chaîne corrigé