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

Tank01
Messages postés
106
Date d'inscription
lundi 4 août 2003
Dernière intervention
10 novembre 2006
- 17 mai 2006 à 10:40 - 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
f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 17 mai 2006 à 12:13
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;

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de f0xi
neosystemsteam
Messages postés
23
Date d'inscription
vendredi 7 octobre 2005
Dernière intervention
28 juillet 2006
- 17 mai 2006 à 10:57
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
exyacc
Messages postés
163
Date d'inscription
dimanche 20 octobre 2002
Dernière intervention
31 juillet 2008
- 17 mai 2006 à 11:26
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
f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 17 mai 2006 à 12:10
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
Tank01
Messages postés
106
Date d'inscription
lundi 4 août 2003
Dernière intervention
10 novembre 2006
- 17 mai 2006 à 14:26
0
Merci
Merci à tous pour vos solution !
Commenter la réponse de Tank01
Emandhal
Messages postés
199
Date d'inscription
dimanche 2 mars 2003
Dernière intervention
10 octobre 2006
- 17 mai 2006 à 18:40
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
Tank01
Messages postés
106
Date d'inscription
lundi 4 août 2003
Dernière intervention
10 novembre 2006
- 18 mai 2006 à 15:56
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.