Soyez le premier à donner votre avis sur cette source.
Snippet vu 9 951 fois - Téléchargée 37 fois
bool est_chiffre(char c) //retourne TRUE le caractère c est un chiffre, FALSE sinon { return c>='0' && c<='9'; //teste si c est compris entre 0 et 9 } int strnumcmp(char *s,char *t) //renvoie 0 si les chaînes s et t sont identiques, un entier négatif //si s est avant t dans l'alphabet numérique, positif si t est avant { int ls,lt; //ls et lt sont les longueurs des séries numériques de s et t while(*s==*t && *s!=0) //cette boucle parcourt les 2 chaînes //caractère par caractère tant que ceux-ci sont égaux et que les //chaînes ne sont pas terminées { ls=0; lt=0; if(est_chiffre(*s)==true) //si l'on trouve un chiffre { while(est_chiffre(*s)==true) {s++;ls++;} while(est_chiffre(*t)==true) {t++;lt++;} //on évalue les longueurs des deux séries numériques... } if(ls!=lt) return ls-lt; //et si elles sont différentes, on renvoie leur différence s=s-ls+1; //sinon, on revient au caractère du début de la t=t-lt+1; //série numérique, pour continuer la comparaison } return *s-*t; //retourne la différence entre les deux caractères //en cours }
char a[10] = "nico129";
char b[10] = "nico13";
le nombre de caractère que strcmp() va comparé, est le nombre de caractère de la plus petite chaine entre 'a' et 'b'. '9' dans la première chaine(a) est donc oublier(non pris en compte), alors, en code ascii, '2' vient avant '3' et donc 'a' est plus petit que 'b' ... en claire:
nico129 vient avant nico13
Bref, il n'y à aucun bug à la fonction strcmp() ...
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.