Bonjour
Alors je cherche à réaliser une fonction sous Ocaml qui fait une rotation d'une chaîne de caractères et enregistre à chaque tour le résultat dans un tableau de n cases (où n vaut la longueur de la chaîne de caractères).
Par exemple, si je lance : rotate "salut" il devrait me renvoyer :
Donc voici le code que j'ai écrit :: - String Array = [|aluts ; lutsa ; utsal ; tsalu ; salut|]
et malheuresement il me retourne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 let rotation s = let n = String.length s in let tab = Array.make n "vide" and tmp = ref s.[0] in for i = 0 to n-1 do tmp := s.[0]; for i2 = 0 to n-2 do s.[i2] <- s.[i2 + 1]; done; s.[n-1]<- !tmp; tab.(i) <- s; done; tab;;
qui est la dernière valeur de s; pourtant s passe bien par toutes les valeurs souhaitées et ces valeurs sont bien enregistrées dans le tableau. Seulement, il réécrit toujours au dessus :: - String Array = [|salut ; salut ; salut ; salut ; salut|]
Et c'est là que je ne comprends pas car j’insère s dans dans la case du tableau qui correspond à i alors pourquoi les cases du tableau qui sont plus petites que i changent aussi ?pour i = 0 le tableau est
[|aluts;vide;vide;vide;vide|]
pour i = 1 le tableau est
[|lutsa; lutsa ; vide ;vide;vide|]
pour i = 3 le tableau est
[|uttsal; utsal ; utsal ;vide;vide|]
etc...
Merci.
Partager