Chercher un caractère dans un string [Résolu]

Signaler
Messages postés
106
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
10 novembre 2006
-
Messages postés
106
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
10 novembre 2006
-
Bonjour,



Je souhaitais savoir comment parcourir une String caractère à caractère afin de chercher un certain caractère.

Bonne journée et merci!

7 réponses

Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
ah autant pour moi ... faut pas pchariser S ... ça fait l'effet inverse ... pourtant je sais que c'est une solution inutile pour un caractere unique ...

function PosChar(const SubStr : char; const S: string; Offset: Cardinal = 1): Integer;
var
  I, L : Integer;
begin
  Result := 0;
  if Offset = 1 then begin
     Result := Pos(SubStr, S);
     exit;
  end;

  I := Offset;
  L := Length(S);
  while I <= L do begin
        if S[I] = SubStr then begin
           Result := I;
           exit;
        end;
        Inc(I);
  end;
end;
Messages postés
23
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
28 juillet 2006
1
var chaine , chaine_a_trouver: string;
      x : integer;
begin
for x : =0 to length(chaine)-1 do
 begin
  if chaine[x]=chaine_a_trouver then // votre condition ici
 end;
end;
neosystems.team@gmail.com
Messages postés
163
Date d'inscription
dimanche 20 octobre 2002
Statut
Membre
Dernière intervention
31 juillet 2008

FONCTION POS
Renvoie la valeur d'indice du premier caractère dans une sous-chaîne spécifiée qui se trouve dans une chaîne.

Unité: System

function Pos(Substr: string; S: string): Integer;

Description

La fonction Pos recherche une sous-chaîne, Substr, à l'intérieur d'une chaîne S. Substr et S sont des expressions de type chaîne.

Pos recherche Substr à l'intérieur de S et renvoie une valeur entière correspondant à l'indice du premier caractère de Substr à l'intérieur de S. Pos fait la distinction majuscules/minuscules. Si Substr est introuvable, Pos renvoie zéro.

exemple  pos('z','klhjkhkz')
exyacc
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
hophop

attention les chaines sont assé particuliere a "parcourir" cela degrade les performances trés vite ...

le meilleur moyen : utiliser POS ou POSEX (unité StrUtils)

POSEX afficheras de meilleur performance qu'une methode avec boucle for.

en adaptant POSEX pour les Char uniquement, on augmente un peu les performances de celle-ci :

function PosChar(const SubStr : char; const S: string; Offset: Cardinal = 1): Integer;
var
  I, L : Integer;
  PS   : PChar;
begin
  Result := 0;
  if Offset = 1 then begin
     Result := Pos(SubStr, S);
     exit;
  end;

  I := Offset-1;
  L := Length(S)-1;
  PS:= PChar(S);
  while I <= L do begin
        if PS[I] = SubStr then begin
           Result := I+1;
           exit;
        end;
        Inc(I);
  end;
end;
Messages postés
106
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
10 novembre 2006

Merci à tous pour vos solution !
Messages postés
194
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
10 octobre 2006
2
u tout le monde.
Et ca?

function PosChar(const SubStr : char; const S: string; Offset: Cardinal = 1): Integer;
var
  pS: PChar;
begin
  Result := 0;
  pS := PChar(S);
  While pS^<>#0 do
  begin
    If pS^=SubStr Then
    begin
      Result := pS-PChar(S)+1; // à vérifier le '+1' s'il est utile, je fais ca de tete là ^^
      Exit;
    end;
    Inc(pS);
  end;
end;



Je pense que c'est plus rapide, mais pour un cas comme celui là, un Pos suffit je pense.

Tout problème a sa solution... Mais en général, celle que l'on trouve n'est jamais la bonne...
Messages postés
106
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
10 novembre 2006

Merci c'est cool jai trouvé grace à vous !!