begin process at 2012 05 27 15:00:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > CORRECTION DE LA FONCTION STRCMP(...) (VISUAL C++)

CORRECTION DE LA FONCTION STRCMP(...) (VISUAL C++)


 Information sur la source

Note :
Aucune note
Catégorie :Chaîne de caractères Niveau :Débutant Date de création :14/03/2002 Date de mise à jour :04/04/2002 08:49:16 Vu :7 948

Auteur : Wepawetmose

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

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

  • 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
  • }
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!!  


 Sources du même auteur

Source avec Zip COMMANDES MS-DOS (VISUAL C++)
Source avec Zip YAHTZEE (JEU DE DÉS TRÈS COMPLET!) (VISUAL C++)
QUEL JOUR SOMMES-NOUS?? (VISUAL C++)
Source avec Zip ECHECS (VISUAL C++)
Source avec Zip PUISSANCE 4 (VISUAL C++)

 Sources de la même categorie

CALCUL DE CLEF RIB par Renfield
Source avec Zip [C] WD_STRING V2.2 par cyberripper
Source avec Zip LES STRING EN C, AFFECTATION, CONCATÉNATION, SPLIT, ... par appranting
Source avec Zip [C] WD_STRING V1.9 par cyberripper
Source avec Zip LIBRAIRIE LANGUAGES par astro53

Commentaires et avis

Commentaire de NitRic le 19/04/2003 03:16:03

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() ...

Commentaire de MetalDwarf le 31/12/2004 12:19:50

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....)

Commentaire de Aurel184 le 24/10/2007 10:34:56

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

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales