POSITION D'UNE CHAINE DANS UNE CHAINE (INSTR) SANS MFC NI CLASS

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 - 30 mai 2005 à 10:21
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 11 août 2005 à 22:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31700-position-d-une-chaine-dans-une-chaine-instr-sans-mfc-ni-class

victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
11 août 2005 à 22:45
Bonjour,

Pour le code qui est assez simple qui venait d'une bonne idée et grâce aux commentaires je mets 6/10 !

Bonne prog,
@++
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
6 juin 2005 à 12:48
c'est ce que vecchio56 disait, ...
RaphAstronome Messages postés 104 Date d'inscription samedi 7 décembre 2002 Statut Membre Dernière intervention 17 août 2009
6 juin 2005 à 12:36
Il y a des solution beaucoup plus simple et plus optimisées

int InStr(char* Buffer, char* FindBuffer) {
// Retourne le pointeur vers là où est trouvé FindBuffer
char* debutChaineTrouve = strstr(Buffer, FindBuffer);

// Si pas trouvé
if (debutChaineTrouve == NULL) return -1;

// Si trouvé on compare avec le début de la chaîne
return (int)debutChaineTrouve-(int)Buffer;

// Attention le premier caractère =0, le second=1, ect ...
}

Et avec ça pas besoin de #include <string.h>
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
31 mai 2005 à 00:10
Arnotic & vecchio56 ­> Merci je prends note :)
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
30 mai 2005 à 23:19
Max12, strstr renvoi le pointeur du début de la chaine où elle à était trouvée.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 mai 2005 à 19:21
strstr c'est la même chose, il suffit de faire une soustraction de pointeurs pour obtenir la position
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
30 mai 2005 à 19:09
strstr retourne pas la posistion ... elle retourne la fin à partir du caractère ... Bon je vais arranger ça la dépendance.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 mai 2005 à 10:50
for(unsigned int i = 0; i < strlen(Buffer); i++)

Si ca se trouve le compilo va calculer à chaque fois strlen(Buffer), alors que ca ne change pas
Pour des raisons sémantiques tu devrais mettre Buffer et FindBuffer en const char*

Et si ta fonction dépend de <string.h> puisqu'elle utilise strlen
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
30 mai 2005 à 10:21
Oui il existe une fonction : strstr()
Rejoignez-nous