Inversser une chaine mais pas les caractères

Partagez votre expérience de PureBasic avec les autres utilisateurs.
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Inversser une chaine mais pas les caractères

Message 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$)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Inversser une chaine mais pas les caractères

Message 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$)
:wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Demivec
Messages : 91
Inscription : sam. 18/sept./2010 18:13

Re: Inversser une chaine mais pas les caractères

Message 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$)
:wink:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Inversser une chaine mais pas les caractères

Message 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$)
:wink:
réduit ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Inversser une chaine mais pas les caractères

Message par Kwai chang caine »

Oui je me suis dit la même chose :lol:
Mais je pense que notre ami DEMIVEC parlait de réduction par rapport à la première version :roll:

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 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Inversser une chaine mais pas les caractères

Message par dayvid »

Idem :)

Super vos coden :o , merci beaucoup :) , dic donc, drastiquement réduit mon code :lol:
mais petit problème :mrgreen:

Comment tu fait si c'est pas que des espaces mais pas exemple une tabulation
ou tous autre caractère INVISIBLE :lol:
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Demivec
Messages : 91
Inscription : sam. 18/sept./2010 18:13

Re: Inversser une chaine mais pas les caractères

Message 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 :lol:

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. :oops:

@KCC: Salut.
Dernière modification par Demivec le dim. 24/avr./2011 3:05, modifié 1 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Inversser une chaine mais pas les caractères

Message 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$)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Inversser une chaine mais pas les caractères

Message 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 :oops:
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 ?? :roll:

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$)))
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Inversser une chaine mais pas les caractères

Message 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$) + "'"
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Demivec
Messages : 91
Inscription : sam. 18/sept./2010 18:13

Re: Inversser une chaine mais pas les caractères

Message par Demivec »

@Le Soldat Inconnu: Excellent. J'ai corrigé mon dernier code.
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Inversser une chaine mais pas les caractères

Message par dayvid »

Merci beaucoup tous le monde :oops: :D
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Répondre