begin process at 2010 02 10 13:05:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Texte

 > INSTRREV

INSTRREV


 Information sur la source

Note :
Aucune note
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 429

Auteur : sosodef88

Ecrire un message privé
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é

 Sources du même auteur

VERIFIER SI UN NUMERO DE TELEPHONE EST VALIDE

 Sources de la même categorie

Source avec Zip COMBINAISONS DE STRINGS par askil2000
Source avec Zip Source avec une capture RECONNAISSANCE DE CARACTÈRES (OCR) par Bacterius
Source avec Zip Source avec une capture NETTOYAGE AUTOMATIQUE DE NOMS DE FICHIERS par John Dogget
DISTANCE DE JARO-WINKLER par PoulpHunter
Source avec Zip BASE DE DONNÉE WIKI par thithony

Commentaires et avis

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.

Commentaire de sosodef88 le 03/03/2005 17:39:59

je trouve quand meme me ma fonction est plus simple

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 :(

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)

Commentaire de ni69 le 03/03/2005 17:54:02

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

Commentaire de MAURICIO le 03/03/2005 17:57:18

Il y a Break les amis !

Commentaire de MAURICIO le 03/03/2005 17:59:11

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

Commentaire de ni69 le 03/03/2005 18:02:45

lol Mauricio, ce n'est rien :)

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


sinon faut utiliser

Repeat
...
Until ...

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

Commentaire de sosodef88 le 04/03/2005 16:36:27

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

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

Commentaire de jinh68 le 04/03/2005 16:51:53

Héhé :).

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?

Commentaire de sosodef88 le 04/03/2005 17:01:49

merde lol

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

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.

Commentaire de sosodef88 le 05/03/2005 10:18:17

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

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

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales