Intervertir 2 strings [Résolu]

cs_Christophe67 80 Messages postés lundi 2 juin 2003Date d'inscription 15 juin 2012 Dernière intervention - 28 oct. 2011 à 16:27 - Dernière réponse : Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention
- 4 nov. 2011 à 07:45
Bonjour,

J'aimerai savoir s'il existe une fonction en Delphi qui permet d'intervertir 2 strings

String1 <==> String2

sans passer par un buffer

String1 ==> Buffer
String2 ==> String1
Buffer ==> String2

J'espère avoir été suffisamment explicite.

Par avance, merci
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 28 oct. 2011 à 18:14
3
Merci
C' est simple:

procedure TPostIt.ImgFlecheHautClick(Sender: TObject);

  procedure EchangeString(Lbl1, Lbl2: TLabel);
  var Sauv: string;
  begin
    Sauv := lbl1.Caption;
    lbl1.Caption := lbl2.Caption;
    lbl2.Caption := Sauv;
  end;

var
  LabDate1, LabHeure1, LabMemo1, LabCurs1: TLabel;
  LabDate2, LabHeure2, LabMemo2, LabCurs2: TLabel;
begin
  if CursPos=1 then exit;
  LabDate1 := TLabel(FindComponent('Date'+IntToStr(CursPos)));
  LabDate2 := TLabel(FindComponent('Date'+IntToStr(CursPos-1)));

  EchangeString(LabDate1, LabDate2);
end; 


A+



Composants Cindy pour Delphi
Faites une donation.

Merci cs_MAURICIO 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_MAURICIO
dubois77 692 Messages postés jeudi 17 avril 2008Date d'inscription 14 septembre 2018 Dernière intervention - 28 oct. 2011 à 17:13
0
Merci
Bonjour
Tu peux la faire toi même :

procedure EchangeSTring(var S1; var s2);
var z:string;
begin
z := s1;
s1 := s2;
s2 := Z;
end;

exemple

toto := 'XXXXX';
tata := 'YYYYY';
EchangeString(toto,tata);




Dubois77
Commenter la réponse de dubois77
cs_Christophe67 80 Messages postés lundi 2 juin 2003Date d'inscription 15 juin 2012 Dernière intervention - 28 oct. 2011 à 17:35
0
Merci
Merci je vois le principe, mais comment l'adatpter a 2 TLabel.Caption pour un code du genre :

procedure TPostIt.ImgFlecheHautClick(Sender: TObject);
var
LabDate1, LabHeure1, LabMemo1, LabCurs1: TLabel;
LabDate2, LabHeure2, LabMemo2, LabCurs2: TLabel;
begin
if CursPos=1 then exit;
LabDate1 := TLabel(FindComponent('Date'+IntToStr(CursPos)));
LabDate2 := TLabel(FindComponent('Date'+IntToStr(CursPos-1)));
EchangeString(LabDate1.Caption,LabDate2.Caption);
end;

qui ne fonctionne pas dans mon exemple.

Merci
Commenter la réponse de cs_Christophe67
cs_Christophe67 80 Messages postés lundi 2 juin 2003Date d'inscription 15 juin 2012 Dernière intervention - 28 oct. 2011 à 18:23
0
Merci
merci de votre aide !
Commenter la réponse de cs_Christophe67
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 28 oct. 2011 à 18:28
0
Merci
Salut,

ou encore pour un résultat plus large :

type
  THackControl = class(TControl);

procedure EchangeSTring(S1, s2: TControl);
var z:string;
begin
  z := THackControl(s1).Caption;
  THackControl(s1).Caption := THackControl(s2).Caption;
  THackControl(s2).Caption := Z;
end;

procedure TForm3.Button4Click(Sender: TObject);
begin
  EchangeSTring(Label1, Button4);
end;


ce code ne se limite pas qu'aux TLabel mais fonctionne avec tout composant qui possède un Caption ou non à condition qu'il descende de TControl


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
cs_Christophe67 80 Messages postés lundi 2 juin 2003Date d'inscription 15 juin 2012 Dernière intervention - 28 oct. 2011 à 19:12
0
Merci
En effet, plus pratique car plus générale mais me cause un tas d'erreur quand je déclare le contrôle dans Type.
Je conserve donc pour le moment la réponse de Mauricio que j'ai adapté sans soucis.
Commenter la réponse de cs_Christophe67
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 28 oct. 2011 à 19:33
0
Merci
je ne comprend pas bien le problème !

c'est ça qui cloche ?
type
  THackControl = class(TControl);

ou tu le déclares autrement ?

[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 29 oct. 2011 à 04:46
0
Merci
Salut,

Le code de Cirec fonctionne super bien !

Son seul problème est qu'il ne répond pas à la question de Christophe :

J'aimerai savoir s'il existe une fonction en Delphi qui permet d'intervertir 2 strings sans passer par un buffer



procedure EchangeSTringWithoutBuffer(S1, S2: TControl);
begin
  THackControl(S1).Caption := THackControl(S1).Caption+THackControl(S2).Caption;
  THackControl(S2).Caption := Copy(THackControl(S1).Caption,0,Length(THackControl(S1).Caption)-Length(THackControl(S2).Caption));
  THackControl(S1).Caption := Copy(THackControl(S1).Caption,Length(THackControl(S2).Caption)+1,Length(THackControl(S1).Caption)-Length(THackControl(S2).Caption));
end;


Mais c'est du chipotage de chez chipotage.
Commenter la réponse de Caribensila
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 4 nov. 2011 à 07:44
0
Merci
Bah sinon y'a StrUtils.ReverseString (aussi)
Commenter la réponse de Bacterius
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 4 nov. 2011 à 07:45
0
Merci
Ah désolé oublie ca.

Par contre si ce que tu voulais c'est echanger deux strings sans jamais passer par une variable intermédiaire (quelque soit sa taille, par exemple pour un exercice ou quelque chose) tu peux utiliser un xorswap. Pas besoin de passer par un buffer intermédiaire. Mais avec les machines d'aujourd'hui c'est plus simple d'utiliser un buffer.
Commenter la réponse de Bacterius

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.