jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 2006
-
3 mars 2005 à 17:14
jihelb
Messages postés49Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention24 mars 2017
-
7 mars 2005 à 14:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
jihelb
Messages postés49Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention24 mars 2017 7 mars 2005 à 14:06
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;
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 5 mars 2005 à 10:18
mdr delphiprog sur le coup je n'avais pas fait attention ...
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 5 mars 2005 à 09:09
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.
jinh68
Messages postés215Date d'inscriptionmardi 29 juillet 2003StatutMembreDernière intervention 1 septembre 2006 4 mars 2005 à 17:06
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).
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 4 mars 2005 à 17:01
merde lol
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 4 mars 2005 à 16:59
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?
jinh68
Messages postés215Date d'inscriptionmardi 29 juillet 2003StatutMembreDernière intervention 1 septembre 2006 4 mars 2005 à 16:51
Héhé :).
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 4 mars 2005 à 16:48
d'autre part je ne savais pas que VARIABLE[NumChar] donnais la meme chose qu'un copy
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 4 mars 2005 à 16:36
haaa :) merci jin je me demandais s'il existait quelque chose comme downto merci ++
jinh68
Messages postés215Date d'inscriptionmardi 29 juillet 2003StatutMembreDernière intervention 1 septembre 2006 4 mars 2005 à 15:51
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 ^^.
DelphiCool
Messages postés455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 mars 2009 4 mars 2005 à 12:28
sinon faut utiliser
Repeat
...
Until ...
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 3 mars 2005 à 18:02
lol Mauricio, ce n'est rien :)
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 3 mars 2005 à 17:59
et bem voilà, j' ai posté en meme temps que toi ni69!
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 3 mars 2005 à 17:57
Il y a Break les amis !
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 3 mars 2005 à 17:54
on peut sortir d'une boucle avec Break...
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 3 mars 2005 à 17:44
n'y aurais t il pas un moyen de sortir de la boucle proprement dit .... (exit for en VB)
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 3 mars 2005 à 17:42
en fait j'utilise jamais les while c'est pour ca .... jsé pa pk mais j'aime pas ca :(
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 décembre 2005 3 mars 2005 à 17:39
je trouve quand meme me ma fonction est plus simple
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 3 mars 2005 à 17:14
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;
7 mars 2005 à 14:06
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;
5 mars 2005 à 10:18
5 mars 2005 à 09:09
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.
4 mars 2005 à 17:06
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).
4 mars 2005 à 17:01
4 mars 2005 à 16:59
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?
4 mars 2005 à 16:51
4 mars 2005 à 16:48
4 mars 2005 à 16:36
4 mars 2005 à 15:51
begin
for i:= length(src) -1 downto 0 do
if src[i] = s then
break;
result := i;
end;
Y'a ça aussi ^^.
4 mars 2005 à 12:28
Repeat
...
Until ...
3 mars 2005 à 18:02
3 mars 2005 à 17:59
3 mars 2005 à 17:57
3 mars 2005 à 17:54
3 mars 2005 à 17:44
3 mars 2005 à 17:42
3 mars 2005 à 17:39
3 mars 2005 à 17:14
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.