Renverser une chaine de caractère

Signaler
Messages postés
83
Date d'inscription
jeudi 18 juillet 2002
Statut
Membre
Dernière intervention
8 octobre 2008
-
Messages postés
83
Date d'inscription
jeudi 18 juillet 2002
Statut
Membre
Dernière intervention
8 octobre 2008
-
Salut à tous !
Voila je voudrais renverser une chaine de caractere, j'ai trouver ce script :

function InverseStr(sDep : string) : string;
var
sFin : string;
i : integer;
begin
sFin:= '';
for i:= length(sDep) downto 1 do
begin
sFin:= sFin + copy(sDep, i,1);
end;
result:= sFin;
end;

Il est bien, mais ca renverse comme ca :

0123456789 -> 9876543210

et moi je voudrait faire idem mais avec un crénaux de 2 !

c'est à dire :

01 23 45 67 89 -> 89 67 45 23 01

Vous voyez ce que je veux dire ?

Si quel'q'un sait comment modifier cette fonction ou bien me proposer autre chose, je suis preneur :)

Merci d'avance

6 réponses

Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2020
6
Si j'ai bien compris le problème, ceci devrait faire l'affaire (l'utilisateur ne rentre que des chiffres en nombre pairs, sinon Exit...) :

function InverseString(sDep: String): String;
var sFin: String;
    i: Integer;
begin
  sFin := '';
  i := Length(sDep);
  if Length(sDep) mod 2 <> 0 then Exit; // ici filtrage
  //(Exit ou autre instruction, c'est toi qui vois...)
  while i <> 0 do
  begin
    sFin := sFin + Copy(sDep, i - 1, 2);
    Dec(i, 2);
  end;
  Result := sFin;
end;


Il me semble que ça fonctionne. Hein ?

Bonne prog' :-p
Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2020
6
Et je constate que le code auquel tu te réfères a été expédié sur ce site comme un code source complet. Des sources comme ça, j'en balance 10 par jour, c'est sûr...
Plutôt que de répondre sur les forums. Pfffffffffff...
Vive le partage du savoir, comme disent certains...
Avec un peu d'humilité, ça serait mieux lol ;)
Messages postés
83
Date d'inscription
jeudi 18 juillet 2002
Statut
Membre
Dernière intervention
8 octobre 2008

Merci je vais essayer :)
Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2020
6
On peur par ailleurs simplifier ce code mal ficelé au départ ainsi :

function InverseString(sDep: String): String;
var i: Integer;
begin
  Result := '';
  i := Length(sDep);
  if Length(sDep) mod 2 <> 0 then Exit; // ici filtrage
  //(Exit ou autre instruction, c'est toi qui vois...)
  while i <> 0 do
  begin
    Result := Result + Copy(sDep, i - 1, 2);
    Dec(i, 2);
  end;
end;


Ca économise au moins une variable :big)
Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2020
6
On peut, je voulais dire, faut pas avoir peur quoi... (mdr)
Bonne prog', âme au coeur :)
Messages postés
83
Date d'inscription
jeudi 18 juillet 2002
Statut
Membre
Dernière intervention
8 octobre 2008

Merci :)
Tu pourrais regarder le sujet sur eMule :)

C'est exactement cela si tu veux je te send la source !