Algorithme, inverser mots d'une phrase
Bonjour,
J'ai une question, je bloque sur la résolution d'un problème
je cherche à résoudre un algorithme me permettant d'inverser l'ordre des mots dans une phrase
par exemple : "il fait beau, il fait chaud."
réponse : "chaud. fait il beau, fait il"
comment faire ?
en langage algo papier basique
j'ai pensé à ça
Algorithme inversion
Var
réponse, résultat, phrase, temp1, temp2 : chaine
pos, long : int
Début
long <-- longueur(phrase)
pos <-- position (" "; phrase; 1)
// recherche d'un espace dans ma phrase à partir du 1er caractère
résultat <-- sousChaine( phrase; 1 ; pos -1)
// récupère la valeur à partir de la position 1 jusqu'à pos - 1 donc ici on récupère : " il "
temp1 <-- résultat
temp2<-- pos
pos <-- position (" "; phrase; pos + 1)
//pos = 8
résultat <-- sousChaine (phrase; temp2 + 1; pos - 1)
// résultat = fait
temp1 <-- résultat + temp1
// temp1 = fait il
J'ai commencé par ça, je pense être sur la bonne voie, il me faudrait un tant que ?
tant que position différent de 0 faire ... non ?
J'ai une question, je bloque sur la résolution d'un problème
je cherche à résoudre un algorithme me permettant d'inverser l'ordre des mots dans une phrase
par exemple : "il fait beau, il fait chaud."
réponse : "chaud. fait il beau, fait il"
comment faire ?
en langage algo papier basique
j'ai pensé à ça
Algorithme inversion
Var
réponse, résultat, phrase, temp1, temp2 : chaine
pos, long : int
Début
long <-- longueur(phrase)
pos <-- position (" "; phrase; 1)
// recherche d'un espace dans ma phrase à partir du 1er caractère
résultat <-- sousChaine( phrase; 1 ; pos -1)
// récupère la valeur à partir de la position 1 jusqu'à pos - 1 donc ici on récupère : " il "
temp1 <-- résultat
temp2<-- pos
pos <-- position (" "; phrase; pos + 1)
//pos = 8
résultat <-- sousChaine (phrase; temp2 + 1; pos - 1)
// résultat = fait
temp1 <-- résultat + temp1
// temp1 = fait il
J'ai commencé par ça, je pense être sur la bonne voie, il me faudrait un tant que ?
tant que position différent de 0 faire ... non ?
2 réponses
-
bonjour,
une fonction VBA qui repond a ta question où
InStr corrspond a ton pos
Mid correspond à sous_chaine
& correspond a la concaténation
à toi de traduire
Function inverse_phrase(p As String) As String Dim debmot As Long, finmot As Long Dim mot As String, ss As String ss = "" p = p & " " debmot = 1 finmot = InStr(debmot, p, " ") While finmot <> 0 mot = Mid(p, debmot, finmot - debmot) debmot = finmot + 1 ss = mot & " " & ss finmot = InStr(debmot, p, " ") Wend inverse_phrase = ss End Function
RQ. au départ p = p & " ", on ajoute un espace a p, le dernier calcul de finmot à partir de cet espace, donnera 0 et arretera le tant que
bonne suite