Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

INSTRREV


Information sur la source

Catégorie :Texte Niveau : Débutant Date de création : 03/03/2005 Date de mise à jour : 04/03/2005 17:13:45 Vu : 3 276

Note :
Aucune note

Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

Description

La fonction InstrRev recherche la position d'un caractère commencant par la fin

Exemple d'utilisation: showmessage(inttostr(Instrrev(edit1.text, 'a'))); // edit1 contient 'alalalalal'

==> La fonction renvoi 9 (c'est le dernier a)
 

Source

  • 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;
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;

Conclusion

merci a jinh68 pour ses conseils :)
 

Historique

03 mars 2005 18:03:29 :
==> j'ai mis un break a la place du exit dans la boucle
04 mars 2005 17:13:47 :
4/03 ==> source changé

Commentaires et avis

signaler à un administrateur
Commentaire de jmp77 le 03/03/2005 17:14:05

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.

signaler à un administrateur
Commentaire de sosodef88 le 03/03/2005 17:39:59

je trouve quand meme me ma fonction est plus simple

signaler à un administrateur
Commentaire de sosodef88 le 03/03/2005 17:42:46

en fait j'utilise jamais les while c'est pour ca .... jsé pa pk mais j'aime pas ca :(

signaler à un administrateur
Commentaire de sosodef88 le 03/03/2005 17:44:55

n'y aurais t il pas un moyen de sortir de la boucle proprement dit .... (exit for en VB)

signaler à un administrateur
Commentaire de ni69 le 03/03/2005 17:54:02

on peut sortir d'une boucle avec Break...

signaler à un administrateur
Commentaire de MAURICIO le 03/03/2005 17:57:18

Il y a Break les amis !

signaler à un administrateur
Commentaire de MAURICIO le 03/03/2005 17:59:11

et bem voilà, j' ai posté en meme temps que toi ni69!

signaler à un administrateur
Commentaire de ni69 le 03/03/2005 18:02:45

lol Mauricio, ce n'est rien :)

signaler à un administrateur
Commentaire de DelphiCool le 04/03/2005 12:28:51 administrateur CS


sinon faut utiliser

Repeat
...
Until ...

signaler à un administrateur
Commentaire de jinh68 le 04/03/2005 15:51:52

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 ^^.

signaler à un administrateur
Commentaire de sosodef88 le 04/03/2005 16:36:27

haaa :) merci jin je me demandais s'il existait quelque chose comme downto merci ++

signaler à un administrateur
Commentaire de sosodef88 le 04/03/2005 16:48:19

d'autre part je ne savais pas que VARIABLE[NumChar] donnais la meme chose qu'un copy

signaler à un administrateur
Commentaire de jinh68 le 04/03/2005 16:51:53

Héhé :).

signaler à un administrateur
Commentaire de sosodef88 le 04/03/2005 16:59:48

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?

signaler à un administrateur
Commentaire de sosodef88 le 04/03/2005 17:01:49

merde lol

signaler à un administrateur
Commentaire de jinh68 le 04/03/2005 17:06:27

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).

signaler à un administrateur
Commentaire de Delphiprog le 05/03/2005 09:09:39 administrateur CS

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.

signaler à un administrateur
Commentaire de sosodef88 le 05/03/2005 10:18:17

mdr delphiprog sur le coup je n'avais pas fait attention ...

signaler à un administrateur
Commentaire de jihelb le 07/03/2005 14:06:35

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;

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.