Casse

blueburry Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 22 mai 2006 - 22 août 2005 à 09:57
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 - 23 août 2005 à 00:02
Bonjour,
j'ai besoin de comparer deux chaines de caracteres dans mon programme, mais je ne veux pas que celui-ci soit "case sensitive". C'est-à-dire ke je ne veux pasq k'il prenne en considération la casse. Quelle instruction devrais-je utiliser?(pour la comparaison, je suis en train d'utiliser memcmp)
merci

10 réponses

vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
22 août 2005 à 10:21
officiellement, le standard ANSI ne fournit aucune fonction, officieusement certain compilateur fournissent cette fonction,



le nom varie selon le compilo que tu utilise



essaye avec sa



#include <string.h>



cela varie suivant le compilo........



strcmpl ()

_stricompl ()

strcmpi ()

stricmp ()



voila, @+, vinc1008881
0
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
22 août 2005 à 10:29
un jour me m'était amuser a redoder string.h..........



voila le code :



int strcmpi (char *string, char *string1)

{

while ((*string)&&(*string1))

{

if ((*string *string1) || (((*string) + 0x20) *string1) || (((*string)-0x20) ==
*string1))

{

string++;

string1++;

}

else return (*string * 0x100 + *string1);

}

return 0;

}



voila, @+, vinc1008881
0
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
22 août 2005 à 10:36
j'ai oublié de dire : la fonction retourne 0 en cas de chaine identique (ex : ABcDE et AbCdE)



sinon elle renvoit un word que la forme : 0x[caractère different de string 1][caractère different de string 2]



toute la subtilité de la fonction réside ds la comparaison : elle s'effectue à 0x20 près...

bon yas un petit bug, c'est que en fait normalement avant la
comparaison faut tester si le caractère ASCII est bien une lettre...si
c'est le cas, alors on effectue la comparaison à 0x20 pres, sinon on
fait une comparaison normale.....



0
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
22 août 2005 à 10:51
voilà un exemple pour dev-cpp



#include <string.h>

_CRTIMP int __cdecl _strcmpi (const char*, const char*);



int main (void)

{

_strcmpi ("ta chaine", "TA CHAINE");

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
22 août 2005 à 10:56
salut,

voici une fonction correcte qui compare deux chaines sans tenir compte de la casse:



// convertit le char passe en parametre en minuscule.

int myTolower(int a)

{

if (a < 'A' || a > 'Z')

return a;

return a + ('a' - 'A');

}



// compare deux chaines sans tenir compte de la casse

int myStricmp(const char* s1, const char* s2)

{

while (myTolower(*s1) == myTolower(*s2++))

if (*s1++ == 0)

return (0);

return (myTolower(*(unsigned char *)s1) - myTolower(*(unsigned char *)(s2 - 1)));

}





a+
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
22 août 2005 à 13:45
[auteurdetail.aspx?ID=327491 vinc1008881]

pourrais tu expliquer mieux ton


else return (*string * 0x100 + *string1);



renvoit un word que la forme : 0x[caractère different de string 1][caractère different de string 2]



là je vois pas trop comment tu peux t'en servir et surtt le but



(en recodant la mm fonction, j'avais renvoyé un booléen)

___________________________________________________________
Magicalement
Nono
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
22 août 2005 à 13:45
ceci dit, ct logique vu que j'implémentais les méth operator== et operator!=

___________________________________________________________
Magicalement
Nono
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 août 2005 à 19:15
vinc1008881 ta fonction n'est pas bonne, puisque ce n'est pas parce que deux caractères sont éloingées de 0x20 qu'ils sont les mêmes. Par exemple, même sans tenir compte de la casse, ' ' et (' ' + 0x20) sont différents
La solution de cosmobob a l'air pas mal, mais il faut peut être que tu gère quelques autre caractères? È et è, À et à...
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
22 août 2005 à 20:14
Et il ne faut pas oublier d'utiliser les fonctions de ctype.h (en
l'occurence toupper ou tolower) si vous voulez que le code soit
portable.
0
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
23 août 2005 à 00:02
ouep dsl pour la fonction , plein de bug etc...



le but du return [caractère 1 * 0x100 + caractère] est de voir les 2
caractère qui sont diffrent (c'est un peu plus utile que le return 1 en
cas d'echec....)



voilà, @+, vinc1008881
0
Rejoignez-nous