Correction de la fonction strcmp(...) (visual c++)

Contenu du snippet

La plupart des dicos placeraient la chaîne "nico129" avant la chaîne "nico13", alors que c'est fdaux, puisque 13 est plus petit que 129!!
Bref, voilà une petite fonction (2 en fait!) dérivée de la fonction strcmp, mais corrigée...
Je sais pas si ça peut servir à quelqu'un...

Source / Exemple :


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
}

Conclusion :


Fin avril 2002, venez nombreux sur le site:
http://lambda.man.free.fr
merci!!

A voir également

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.