Page 1 sur 1
Inversser une chaine mais pas les caractères
Publié : ven. 22/avr./2011 14:09
par dayvid
Salut !
J'ai crée une fonction pour inversser une chaine entière mais sans pour autent inversser les caractères (les mot)
Code : Tout sélectionner
; crée par monsieur Dieppedalle David en avril 2011
Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "
Procedure.s InversserChaine(Chaine$)
PositionExtraction = 0
Espace = 0
; je vais inversser la position de chaque caractère dans la Chaine$
; Je prends tout les caractères dans l'ordre a partire de la fin de la Chaine$
; exemple: [ abc def ghi jkl ]
; donnera: [ jkl ghi def abc ]
ChaineInversser$ = ReverseString(Chaine$)
Repeat
PositionExtraction + 1
caractere$ = Mid(ChaineInversser$, PositionExtraction, 1)
If caractere$ = " " And Mot$ = ""
Espace + 1 ; ont enregistre le nombre d'éspace
ElseIf caractere$ > "" And caractere$ <> " "
Mot$ = Mot$ + caractere$ ; ont enregistre le caractère
ElseIf caractere$ = " " And Mot$ > " "
PositionExtraction - 1
Phrase$ + Space(Espace) + ReverseString(Mot$)
Espace = 0
Mot$ = ""
ElseIf caractere$ = "" And Espace > 0
Phrase$ + Space(Espace)
ElseIf caractere$ = "" And Mot$ = ""
Break ; ont quitte la boucle car ya rien
EndIf
Until caractere$ = ""
ProcedureReturn Phrase$
EndProcedure
Debug InversserChaine(Chaine$)
Re: Inversser une chaine mais pas les caractères
Publié : ven. 22/avr./2011 16:40
par Kwai chang caine
Code : Tout sélectionner
; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc
Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "
Procedure.s InverserChaine(Chaine$)
For i = CountString(Chaine$, Space(1)) To 1 Step - 1
Phrase$ + " " + StringField(Chaine$, i, Space(1))
Next
ProcedureReturn Phrase$
EndProcedure
Debug InverserChaine(Chaine$)

Re: Inversser une chaine mais pas les caractères
Publié : ven. 22/avr./2011 17:50
par Demivec
Code : Tout sélectionner
; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc, Réduit par Demivec
Chaine$ = "[ abc def ghi jkl ]"
Procedure.s InverserChaine(Chaine$)
Protected compte = CountString(Chaine$, " "), x$, premier = #True
For i = compte To 0 Step - 1
x$ = StringField(Chaine$, i + 1, " ")
If x$ <> ""
If Not premier
Phrase$ + " " + x$
Else
Phrase$ + x$
premier = #False
EndIf
Else
Phrase$ + " " ;reproduisez l'arrangement des espaces
EndIf
Next
ProcedureReturn Phrase$
EndProcedure
Debug InverserChaine(Chaine$)

Re: Inversser une chaine mais pas les caractères
Publié : sam. 23/avr./2011 1:49
par Ar-S
Demivec a écrit :Code : Tout sélectionner
; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc, Réduit par Demivec
Chaine$ = "[ abc def ghi jkl ]"
Procedure.s InverserChaine(Chaine$)
Protected compte = CountString(Chaine$, " "), x$, premier = #True
For i = compte To 0 Step - 1
x$ = StringField(Chaine$, i + 1, " ")
If x$ <> ""
If Not premier
Phrase$ + " " + x$
Else
Phrase$ + x$
premier = #False
EndIf
Else
Phrase$ + " " ;reproduisez l'arrangement des espaces
EndIf
Next
ProcedureReturn Phrase$
EndProcedure
Debug InverserChaine(Chaine$)

réduit ?
Re: Inversser une chaine mais pas les caractères
Publié : sam. 23/avr./2011 7:55
par Kwai chang caine
Oui je me suis dit la même chose

Mais je pense que notre ami DEMIVEC parlait de réduction par rapport à la première version
Je crois sans trop me tromper que DEMIVEC ne maitrise pas trop le français.
En tout cas j'suis content que quelqu'un de son niveau vienne nous voir

Re: Inversser une chaine mais pas les caractères
Publié : sam. 23/avr./2011 12:43
par dayvid
Idem
Super vos coden

, merci beaucoup

, dic donc, drastiquement réduit mon code
mais petit problème
Comment tu fait si c'est pas que des espaces mais pas exemple une tabulation
ou tous autre caractère INVISIBLE

Re: Inversser une chaine mais pas les caractères
Publié : sam. 23/avr./2011 15:55
par Demivec
dayvid a écrit :Comment tu fait si c'est pas que des espaces mais pas exemple une tabulation
ou tous autre caractère INVISIBLE

Code : Tout sélectionner
; crée par monsieur Dieppedalle David en avril 2011
; v3, Réduit par Kcc, corrigé par LSI, modifié par Demivec
Chaine$ = "[ abc def ghi jkl ]"
Chaine2$ = "[" + #tab$ + "abc" + #tab$ + "def" + #tab$ + "ghi" + #tab$ + "jkl" + #tab$ + "]"
Procedure.s InverserChaine(Chaine$, delimiter$ = " ")
Protected compte = CountString(Chaine$, delimiter$), premier = #True
For i = compte To 0 Step - 1
If Not premier
Phrase$ + delimiter$
Else
premier = #False
EndIf
Phrase$ + StringField(Chaine$, i + 1, delimiter$)
Next
ProcedureReturn Phrase$
EndProcedure
Debug InverserChaine(Chaine$)
Debug InverserChaine(Chaine2$, #tab$)
@Ar-S: Mon erreur.
@KCC: Salut.
Re: Inversser une chaine mais pas les caractères
Publié : sam. 23/avr./2011 17:30
par Le Soldat Inconnu
Je pense que Demivec n'a pas réduit mais corrigé une boulette de KCC, a savoir l'ajout d'un espace au début de la chaine alors qu'il n'y en avais pas.
LA correction de de Demivec en plus simple
Code : Tout sélectionner
; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc, corrigé par LSI
Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "
Procedure.s InverserChaine(Chaine.s)
Protected Phrase.s = ""
For i = CountString(Chaine, " ") To 1 Step - 1
If Phrase <> ""
Phrase + " "
EndIf
Phrase + StringField(Chaine, i, " ")
Next
ProcedureReturn Phrase
EndProcedure
Debug InverserChaine(Chaine$)
Re: Inversser une chaine mais pas les caractères
Publié : sam. 23/avr./2011 18:23
par Kwai chang caine
Le Soldat Inconnu a écrit :Je pense que Demivec n'a pas réduit mais corrigé une boulette de KCC, a savoir l'ajout d'un espace au début de la chaine alors qu'il n'y en avais pas.
Bah, loin de moi de vouloir te contredire, étant donné ton niveau comparé au miens
Mais y'a bien un espace au début et un a la fin dans la phrase d'origine non ???
Et pareil dans la phrase inversée, non ??
Code : Tout sélectionner
Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "
Procedure.s InverserChaine(Chaine$)
For i = CountString(Chaine$, Space(1)) To 1 Step - 1
Phrase$ + " " + StringField(Chaine$, i, Space(1))
Next
ProcedureReturn Phrase$
EndProcedure
Chaine2$ = InverserChaine(Chaine$)
Debug Chaine2$
Debug Len(Chaine$)
Debug Len(Chaine2$)
Debug ""
Debug Len(LTrim(Chaine$))
Debug Len(LTrim(Chaine2$))
Debug ""
Debug Len(RTrim(Chaine$))
Debug Len(RTrim(Chaine2$))
Debug ""
Debug Len(LTrim(RTrim(Chaine$)))
Debug Len(LTrim(RTrim(Chaine2$)))
Re: Inversser une chaine mais pas les caractères
Publié : sam. 23/avr./2011 19:40
par Le Soldat Inconnu
Mais ta méthode en rajoute, retire l'espace au début et à la fin de la chaine et tu verras.
Par contre, je pige mieux la correction de Demivec, la mienne n'est pas totalement bonne, mieux la sienne dans le cas ou le texte commence par un espace
Alors je recorrige, en plus il restait un bug que j'avais pas vu, c'est CountString(Chaine, " ") + 1 qu'il faut mettre
Code : Tout sélectionner
; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc, corrigé par LSI
Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "
Procedure.s InverserChaine(Chaine.s)
Protected Phrase.s = "", Premier = 1
For i = CountString(Chaine, " ") + 1 To 1 Step - 1
If Premier = 0
Phrase + " "
Else
Premier = 0
EndIf
Phrase + StringField(Chaine, i, " ")
Next
ProcedureReturn Phrase
EndProcedure
Debug "'" + InverserChaine(Chaine$) + "'"
Re: Inversser une chaine mais pas les caractères
Publié : dim. 24/avr./2011 2:56
par Demivec
@Le Soldat Inconnu: Excellent. J'ai corrigé mon dernier code.
Re: Inversser une chaine mais pas les caractères
Publié : mar. 26/avr./2011 14:41
par dayvid
Merci beaucoup tous le monde
