function InstrRev(Src:string; s: Char): integer; var B:integer; begin result := -1; if length(src) = 0 then exit; if length(s) = 0 then exit; for B:= length(src) downto 0 do if src[B] = s then break; result := B; end;
Hello, Alors je ne trouve pas très élégant de programmer en mettant des exit dans les boucle for. On se croirait revenu au temps de la prehistoire informatique lol. Tiens voici deux fonctions (vite faites) parmi tant d'autres pour faire cela : function SearchChr(Chr : Char; S : String) : Integer; var P0 : Integer; begin Result := 0; P0 := Pos(Chr,S); While (P0>0) do begin Result := Result + P0; P0 := Pos(Chr,Copy(S,Result+1,Length(S)-P0)); end; end; function SearchChr2(Chr : Char; S : String) : Integer; var I : Integer; begin Result := 0; I := Length(S); While (Result = 0) and (I > 0) do begin If (Chr = S[I]) then Result := I; Dec(I); end; end; Voila c'est tout. Bonne prog, JMP77.
je trouve quand meme me ma fonction est plus simple
en fait j'utilise jamais les while c'est pour ca .... jsé pa pk mais j'aime pas ca :(
n'y aurais t il pas un moyen de sortir de la boucle proprement dit .... (exit for en VB)
on peut sortir d'une boucle avec Break...
Il y a Break les amis !
et bem voilà, j' ai posté en meme temps que toi ni69!
lol Mauricio, ce n'est rien :)
sinon faut utiliser Repeat ... Until ...
function searchLastChar(src: string; s: char): integer; begin for i:= length(src) -1 downto 0 do if src[i] = s then break; result := i; end; Y'a ça aussi ^^.
haaa :) merci jin je me demandais s'il existait quelque chose comme downto merci ++
d'autre part je ne savais pas que VARIABLE[NumChar] donnais la meme chose qu'un copy
Héhé :).
ta quand meme fait une erreur jin paske 'alala', 'a' donnera 3 du fait ke c'est le premier en partant de la fin et ca fé break directement donc je dirait : function TForm1.InstrRev(Src:string; s: Char): integer; var B:integer; begin result := -1; if length(src) = 0 then exit; if length(s) = 0 then exit; for B:= length(src) downto 0 do if src[B] = s then break; result := B; end; C'est OK?
merde lol
Non deja c'est for B := Length(Src) downto 1,oui j'ai merdé, les strings sont indexés à 1 ;). Dans le cas ou le caractere n'est pas la ca donnera 0 du coup. Juste une petite remarque sur ton source.Ne repete pas length(src) plusieurs fois,stocke le au début,sinon ca réévalue à chaque fois(pas avc les optimisations de Delphi mais bon).
if length(s) = 0 then exit; Voilà un test bien inutile puisque S est du type Char et que le type Char a une longueur de 1, quelque soit son contenu.
mdr delphiprog sur le coup je n'avais pas fait attention ...
Le 1er test est également inutile car il est fait par le 1er test de boucle. De plus, si le résultat doit être -1 lorsque le car. n'est pas trouvé il est préférable de faire: function InstrRev(Src:string; s: Char): integer; var B:integer; begin result := -1;//pour pas trouvé for B:= length(src) downto 1 do if src[B] = s then begin result := B;//rang changé avant la sortie de boucle break; end; end; ou bien pour éviter une attribution inutile: function InstrRev(Src:string; s: Char): integer; var B:integer; begin for B:= length(src) downto 1 do if src[B] = s then begin result := B;//rang changé avant la sortie de boucle EXIT;//trouvé, on sort de la function end; //on arrive ici seulement si car. pas trouvé ou src vide result := -1 end;
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 598 971 membres 231 nouveaux aujourd'hui 15 441 membres club