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

Messages postés
106
Date d'inscription
lundi 4 août 2003
Dernière intervention
10 novembre 2006
- - Dernière réponse : Tank01
Messages postés
106
Date d'inscription
lundi 4 août 2003
Dernière intervention
10 novembre 2006
- 18 mai 2006 à 15:56
Bonjour,



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

Bonne journée et merci!
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
2 janvier 2019
33
3
Merci
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;

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de f0xi
Messages postés
23
Date d'inscription
vendredi 7 octobre 2005
Dernière intervention
28 juillet 2006
1
1
Merci
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
Commenter la réponse de neosystemsteam
Messages postés
163
Date d'inscription
dimanche 20 octobre 2002
Dernière intervention
31 juillet 2008
0
Merci
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
Commenter la réponse de exyacc
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
2 janvier 2019
33
0
Merci
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;
Commenter la réponse de f0xi
Messages postés
106
Date d'inscription
lundi 4 août 2003
Dernière intervention
10 novembre 2006
0
Merci
Merci à tous pour vos solution !
Commenter la réponse de Tank01
Messages postés
199
Date d'inscription
dimanche 2 mars 2003
Dernière intervention
10 octobre 2006
1
0
Merci
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...
Commenter la réponse de Emandhal
Messages postés
106
Date d'inscription
lundi 4 août 2003
Dernière intervention
10 novembre 2006
0
Merci
Merci c'est cool jai trouvé grace à vous !!
Commenter la réponse de Tank01

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.