Trouver la position d'un caractère dans une chaine [Résolu]

Signaler
Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011
-
katerson
Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011
-
Bonjour,

J'aimerai avoir votre avis sur le problème suivant :

Ma chaine se formatte de la façon suivante: "RD-AAA=?<CR>"
- AAA étant 3 lettres variables
- ? étant une valeur dont je ne connais pas le nombre de caractères

Mon but est simplement de récupérer la valeur ? afin de la comparer avec une variable par la suite.

Je pensais:
- Trouver la position de "=" (1)
- Trouver la position de "<CR>" (2)
- Copier dans une variable (boucle for) les caractères de la position 1 à la position 2.

En cherchant sur internet, je suis tombé sur des fonctions strstr et strchr mais celles-ci me retournent les occurences.
Je sais qu'il existe une fonction qui retourne la position d'un caractère mais je ne la trouve pas...

Si vous la connaissez, merci de m'aider!
MERCI!!!

7 réponses

Messages postés
14710
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2020
90
Sorry.
Avec des commentaires:
p1=strchr(truc,'=');   // récupération de la 1ère occurrence du caractère '='
p2=strchr(truc,'<');   // récupération de la 1ère occurence du caractère '<'

/* ici, j'ai 2 pointeurs délimitant la sous-chaine à extraire*/

strcpy(result,p1+1);   // copie de la sous-chaine (+1 pour ne pas prendre en compte le '='
result[p2-p1-1]='\0';  // troncature de la sous-chaine grâce au 2e pointeur (-1 pour ne pas prendre en compte '<')

/* ici, dans result, j'ai la sous-chaine extraite */

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
14710
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2020
90
Hello,
Tu as fait, je me permets de le souligner, un travail de recherche pertinent, étant donné que tu as trouvé toutes les billes.
strchr() te retourne la 1ère occurrence d'un caractère. Si tu sais que tu as un seul caractère "=", tu peux l'utiliser pour avoir sa position dans la chaine. Idem pour le <CR> avec strstr() (ou bien strchr() sur "<").
Avec ça, tu as les 2 positions voulues. Avec un strncpy() tu devrais pourvoir extraire ta sous-chaine.


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011

Bruno,

Je suis d'accord mais strchr(buffer,'=') me retourne alors "=?<CR>".

En quoi cela m'aide pour trouver la POSITION de "=" dans mon buffer ?
Je voudrais obtenir la position (une valeur) dans la chaine, non pas la chaine de caractère depuis l'occurence.

Désolé, je n'y suis pas là....
Messages postés
14710
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2020
90
strchr() te retourne le pointeur sur la 1ère occurence. Donc, ici, un pointeur sur "="
si tu fais la même chose avec "<", tu obtiens 2 pointeurs qui encadrent ta sous-chaine

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011

Buno ,

Tout d'abord: Merci de ton aide !


J'ai bien compris, mais je ne sais pas les manipuler.

Mes 2 pointeurs me donnent l'adresse du début et de fin de la chaine recherchée ... j'en fais quoi?
Messages postés
14710
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2020
90
Tu peux faire un truc comme ceci:
    char *truc="RD-AAA=?<CR>";
    char result[10];
    char * p1, *p2;

    p1=strchr(truc,'=');
    p2=strchr(truc,'<');
    strcpy(result,p1+1);
    result[p2-p1-1]='\0';



@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011

Merci beaucoup!
Je vais enfin pouvoir avancer !

A plus