Bonjour
Alors je cherche à réaliser une fonction sous ocaml qui fait une rotation d'une chaîne de caractère et enregistre à chaque tour le résultat dans un tableau de n case (ou n vaut la longueur de la chaîne de caractère)
par exemple si je lance : rotate "salut"
Il devrait me renvoyer :Donc voici le code que j'ai écrit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part - 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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part : - String Array = [|salut ; salut ; salut ; salut ; salut|]
pour i = 0 le tableau est
pour i = 1 le tableau est
Code : Sélectionner tout - Visualiser dans une fenêtre à part [|aluts;vide;vide;vide;vide|]
Code : Sélectionner tout - Visualiser dans une fenêtre à part [|lutsa; lutsa ; vide ;vide;vide|]
pour i = 3 le tableau est
etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part [|uttsal; utsal ; utsal ;vide;vide|]
Et c'est la que je ne comprend pas car j’insère s dans dans la case du tableau qui correspond à i alors pourquoi les cases du tableau qui sont plus petite que i changent aussi ?
Merci
Partager