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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 838 fois - Téléchargée 37 fois

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

Ajouter un commentaire

Commentaires

Messages postés
21
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
9 juin 2010
1
Juste pour donner un exemple d'utilisation de la fonction explode : Imaginons que l'on travail sur un petit logiciel avec connexion socket. On reçoit une chaine de caractères qui contient des paramètres séparés par des expaces (ou un autre délimiteur). La fonction explode sépare tout ça
Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

Oui il n y a pas de bug dans la focntion strcmp(), ni dans la fonction strncmp(), mais les fonctions presentees ici sont quand meme bien pratiques (ca m enerve toujours quand winamp place la plage 12 avant la plage 9 d un repertoire de MP3 parce que les pistes commancent par 9 et 12 au lieu de 09 et 12....)
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

Il n'y à absolument aucun bug à la fonction strcmp(), strcmp() compare via le code ascii des caractères et non par ordre alphabétique ...

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.