En allemand, par exemple, si j'ignore la case, je dois avoir "Fuß" = > "FUSS". Ce que je ne sais pas faire en Java ; en C++, c'est précisement le but des facettes std::collate. Il y a une subtilité pas évidente à gérer : "Maße" (pluriel de "Maß") devrait
comparer égal à "MASZE" plutôt qu'à "MASSE" ; ceci afin d'éviter la confusion avec "Masse", qui pourrait complètement changer le sens d'une phrase : "Schnaps und Bier sollte man nur in MASZEN trinken, nicht in MASSEN" (non seulement avant de conduire, mais aussi avant de faire du C++ ...)
Falk "Ils sont fous, ces Teutons !" Tannhäuser
kanze@gabi-soft.fr wrote:
En allemand, par exemple, si j'ignore la case, je dois avoir "Fuß" = > "FUSS". Ce que je ne sais pas faire en Java ; en C++, c'est précisement
le but des facettes std::collate.
Il y a une subtilité pas évidente à gérer : "Maße" (pluriel de "Maß") devrait
comparer égal à "MASZE" plutôt qu'à "MASSE" ; ceci afin d'éviter la confusion
avec "Masse", qui pourrait complètement changer le sens d'une phrase :
"Schnaps und Bier sollte man nur in MASZEN trinken, nicht in MASSEN"
(non seulement avant de conduire, mais aussi avant de faire du C++ ...)
En allemand, par exemple, si j'ignore la case, je dois avoir "Fuß" = > "FUSS". Ce que je ne sais pas faire en Java ; en C++, c'est précisement le but des facettes std::collate. Il y a une subtilité pas évidente à gérer : "Maße" (pluriel de "Maß") devrait
comparer égal à "MASZE" plutôt qu'à "MASSE" ; ceci afin d'éviter la confusion avec "Masse", qui pourrait complètement changer le sens d'une phrase : "Schnaps und Bier sollte man nur in MASZEN trinken, nicht in MASSEN" (non seulement avant de conduire, mais aussi avant de faire du C++ ...)
Falk "Ils sont fous, ces Teutons !" Tannhäuser
kanze
Falk Tannhäuser wrote in message news:...
wrote:
En allemand, par exemple, si j'ignore la case, je dois avoir "Fuß" == "FUSS". Ce que je ne sais pas faire en Java ; en C++, c'est précisement le but des facettes std::collate.
Il y a une subtilité pas évidente à gérer :
Il n'y en a pas qu'un.
"Maße" (pluriel de "Maß") devrait comparer égal à "MASZE" plutôt qu'à "MASSE" ; ceci afin d'éviter la confusion avec "Masse", qui pourrait complètement changer le sens d'une phrase : "Schnaps und Bier sollte man nur in MASZEN trinken, nicht in MASSEN" (non seulement avant de conduire, mais aussi avant de faire du C++ ...)
Ça, c'est en Allemagne, et encore, pas systèmatiquement. (Officiellement, la règle existe, mais elle est souvent ignorée.) En Suisse, et dans certaines applications en Allemagne (bottin téléphonique, par exemple), « ändern » et « Aendern » doivent aussi comparer égal.
Sans parler des règles de français, où on ignore les accents, sauf si les mots seraient égaux, et puis, on considère l'accent le plus à droit d'abord.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Falk Tannhäuser <falk.tannhauser@crf.canon.fr> wrote in message
news:<3F715E8A.D76D9B14@crf.canon.fr>...
kanze@gabi-soft.fr wrote:
En allemand, par exemple, si j'ignore la case, je dois avoir "Fuß"
== "FUSS". Ce que je ne sais pas faire en Java ; en C++, c'est
précisement le but des facettes std::collate.
Il y a une subtilité pas évidente à gérer :
Il n'y en a pas qu'un.
"Maße" (pluriel de "Maß") devrait comparer égal à "MASZE" plutôt qu'à
"MASSE" ; ceci afin d'éviter la confusion avec "Masse", qui pourrait
complètement changer le sens d'une phrase : "Schnaps und Bier sollte
man nur in MASZEN trinken, nicht in MASSEN" (non seulement avant de
conduire, mais aussi avant de faire du C++ ...)
Ça, c'est en Allemagne, et encore, pas systèmatiquement.
(Officiellement, la règle existe, mais elle est souvent ignorée.) En
Suisse, et dans certaines applications en Allemagne (bottin
téléphonique, par exemple), « ändern » et « Aendern » doivent aussi
comparer égal.
Sans parler des règles de français, où on ignore les accents, sauf si
les mots seraient égaux, et puis, on considère l'accent le plus à droit
d'abord.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
En allemand, par exemple, si j'ignore la case, je dois avoir "Fuß" == "FUSS". Ce que je ne sais pas faire en Java ; en C++, c'est précisement le but des facettes std::collate.
Il y a une subtilité pas évidente à gérer :
Il n'y en a pas qu'un.
"Maße" (pluriel de "Maß") devrait comparer égal à "MASZE" plutôt qu'à "MASSE" ; ceci afin d'éviter la confusion avec "Masse", qui pourrait complètement changer le sens d'une phrase : "Schnaps und Bier sollte man nur in MASZEN trinken, nicht in MASSEN" (non seulement avant de conduire, mais aussi avant de faire du C++ ...)
Ça, c'est en Allemagne, et encore, pas systèmatiquement. (Officiellement, la règle existe, mais elle est souvent ignorée.) En Suisse, et dans certaines applications en Allemagne (bottin téléphonique, par exemple), « ändern » et « Aendern » doivent aussi comparer égal.
Sans parler des règles de français, où on ignore les accents, sauf si les mots seraient égaux, et puis, on considère l'accent le plus à droit d'abord.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Christophe Lephay
"Michel Michaud" a écrit dans le message de news:rz9cb.5995$
Dans news:bkqdr5$gvs$, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une sorte de surcharge ou une conversion ?
Chris
"Michel Michaud" <mm@gdzid.com> a écrit dans le message de
news:rz9cb.5995$yD1.936942@news20.bellglobal.com...
Dans news:bkqdr5$gvs$1@news-reader4.wanadoo.fr, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une sorte
de surcharge ou une conversion ?
"Michel Michaud" a écrit dans le message de news:rz9cb.5995$
Dans news:bkqdr5$gvs$, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une sorte de surcharge ou une conversion ?
Chris
kanze
"Christophe Lephay" wrote in message news:<bkt3ck$r59$...
"Michel Michaud" a écrit dans le message de news:rz9cb.5995$
Dans news:bkqdr5$gvs$, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une sorte de surcharge ou une conversion ?
Oui:-).
En fait, l'expression de contrôle du switch peut être de type entier, de type enum ou d'un type classe pour lequel il existe une (et une seule) conversion vers un type entier ou un type enum. Si c'est de type classe, la conversion aurait lieu. Ensuite, il y a « promotion » : c-à-d en gros que pour un type entier plus petit qu'un int, il y a conversion en int.
En ce qui concerne les constantes dans les case, elles sont converties aussi au type promu.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Christophe Lephay" <christophe-lephay@wanadoo.fr> wrote in message
news:<bkt3ck$r59$1@news-reader3.wanadoo.fr>...
"Michel Michaud" <mm@gdzid.com> a écrit dans le message de
news:rz9cb.5995$yD1.936942@news20.bellglobal.com...
Dans news:bkqdr5$gvs$1@news-reader4.wanadoo.fr, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une
sorte de surcharge ou une conversion ?
Oui:-).
En fait, l'expression de contrôle du switch peut être de type entier, de
type enum ou d'un type classe pour lequel il existe une (et une seule)
conversion vers un type entier ou un type enum. Si c'est de type classe,
la conversion aurait lieu. Ensuite, il y a « promotion » : c-à-d en gros
que pour un type entier plus petit qu'un int, il y a conversion en int.
En ce qui concerne les constantes dans les case, elles sont converties
aussi au type promu.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Christophe Lephay" wrote in message news:<bkt3ck$r59$...
"Michel Michaud" a écrit dans le message de news:rz9cb.5995$
Dans news:bkqdr5$gvs$, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une sorte de surcharge ou une conversion ?
Oui:-).
En fait, l'expression de contrôle du switch peut être de type entier, de type enum ou d'un type classe pour lequel il existe une (et une seule) conversion vers un type entier ou un type enum. Si c'est de type classe, la conversion aurait lieu. Ensuite, il y a « promotion » : c-à-d en gros que pour un type entier plus petit qu'un int, il y a conversion en int.
En ce qui concerne les constantes dans les case, elles sont converties aussi au type promu.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Christophe Lephay
a écrit dans le message de news:
"Christophe Lephay" wrote in message news:<bkt3ck$r59$...
"Michel Michaud" a écrit dans le message de news:rz9cb.5995$
Dans news:bkqdr5$gvs$, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une sorte de surcharge ou une conversion ?
Oui:-).
En fait, l'expression de contrôle du switch peut être de type entier, de type enum ou d'un type classe pour lequel il existe une (et une seule) conversion vers un type entier ou un type enum. Si c'est de type classe, la conversion aurait lieu. Ensuite, il y a « promotion » : c-à-d en gros que pour un type entier plus petit qu'un int, il y a conversion en int.
Donc Fabien avait raison : sitch, c'est bien avec les int, avec conversion vers int le cas échéant ?
Chris
<kanze@gabi-soft.fr> a écrit dans le message de
news:d6652001.0309250339.744345a9@posting.google.com...
"Christophe Lephay" <christophe-lephay@wanadoo.fr> wrote in message
news:<bkt3ck$r59$1@news-reader3.wanadoo.fr>...
"Michel Michaud" <mm@gdzid.com> a écrit dans le message de
news:rz9cb.5995$yD1.936942@news20.bellglobal.com...
Dans news:bkqdr5$gvs$1@news-reader4.wanadoo.fr, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une
sorte de surcharge ou une conversion ?
Oui:-).
En fait, l'expression de contrôle du switch peut être de type entier, de
type enum ou d'un type classe pour lequel il existe une (et une seule)
conversion vers un type entier ou un type enum. Si c'est de type classe,
la conversion aurait lieu. Ensuite, il y a « promotion » : c-à-d en gros
que pour un type entier plus petit qu'un int, il y a conversion en int.
Donc Fabien avait raison : sitch, c'est bien avec les int, avec conversion
vers int le cas échéant ?
"Christophe Lephay" wrote in message news:<bkt3ck$r59$...
"Michel Michaud" a écrit dans le message de news:rz9cb.5995$
Dans news:bkqdr5$gvs$, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une sorte de surcharge ou une conversion ?
Oui:-).
En fait, l'expression de contrôle du switch peut être de type entier, de type enum ou d'un type classe pour lequel il existe une (et une seule) conversion vers un type entier ou un type enum. Si c'est de type classe, la conversion aurait lieu. Ensuite, il y a « promotion » : c-à-d en gros que pour un type entier plus petit qu'un int, il y a conversion en int.
Donc Fabien avait raison : sitch, c'est bien avec les int, avec conversion vers int le cas échéant ?
Chris
kanze
"Christophe Lephay" wrote in message news:<bkum87$obp$...
a écrit dans le message de news:
"Christophe Lephay" wrote in message news:<bkt3ck$r59$...
"Michel Michaud" a écrit dans le message de news:rz9cb.5995$
Dans news:bkqdr5$gvs$, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une sorte de surcharge ou une conversion ?
Oui:-).
En fait, l'expression de contrôle du switch peut être de type entier, de type enum ou d'un type classe pour lequel il existe une (et une seule) conversion vers un type entier ou un type enum. Si c'est de type classe, la conversion aurait lieu. Ensuite, il y a « promotion » : c-à-d en gros que pour un type entier plus petit qu'un int, il y a conversion en int.
Donc Fabien avait raison : sitch, c'est bien avec les int, avec conversion vers int le cas échéant ?
Ça dépend de l'expression de contrôle. Si le type de l'expression est long, par exemple, ou unsigned il n'y a pas de conversion, et les constantes sont converties en long ou unsigned. (Question intéressante : donnée une implémentation où le résultat d'une conversion vers signé qui ne passe pas génère un signal, qu'est-ce qui se passe si l'expression de contrôle est un long, et une des constantes est un unsigned qui ne passe pas dans un long, disons 0x80000000U sur une machine 32 bits ?)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Christophe Lephay" <christophe-lephay@wanadoo.fr> wrote in message
news:<bkum87$obp$1@news-reader2.wanadoo.fr>...
<kanze@gabi-soft.fr> a écrit dans le message de
news:d6652001.0309250339.744345a9@posting.google.com...
"Christophe Lephay" <christophe-lephay@wanadoo.fr> wrote in message
news:<bkt3ck$r59$1@news-reader3.wanadoo.fr>...
"Michel Michaud" <mm@gdzid.com> a écrit dans le message de
news:rz9cb.5995$yD1.936942@news20.bellglobal.com...
Dans news:bkqdr5$gvs$1@news-reader4.wanadoo.fr, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est
une sorte de surcharge ou une conversion ?
Oui:-).
En fait, l'expression de contrôle du switch peut être de type
entier, de type enum ou d'un type classe pour lequel il existe une
(et une seule) conversion vers un type entier ou un type enum. Si
c'est de type classe, la conversion aurait lieu. Ensuite, il y a «
promotion » : c-à-d en gros que pour un type entier plus petit qu'un
int, il y a conversion en int.
Donc Fabien avait raison : sitch, c'est bien avec les int, avec
conversion vers int le cas échéant ?
Ça dépend de l'expression de contrôle. Si le type de l'expression est
long, par exemple, ou unsigned il n'y a pas de conversion, et les
constantes sont converties en long ou unsigned. (Question intéressante :
donnée une implémentation où le résultat d'une conversion vers signé qui
ne passe pas génère un signal, qu'est-ce qui se passe si l'expression de
contrôle est un long, et une des constantes est un unsigned qui ne passe
pas dans un long, disons 0x80000000U sur une machine 32 bits ?)
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Christophe Lephay" wrote in message news:<bkum87$obp$...
a écrit dans le message de news:
"Christophe Lephay" wrote in message news:<bkt3ck$r59$...
"Michel Michaud" a écrit dans le message de news:rz9cb.5995$
Dans news:bkqdr5$gvs$, Christophe
switch, c'est avec les int, non ?
Non, avec les types « entier ». char en est un.
Le méchanisme mis en oeuvre concernant le paramètre du switch est une sorte de surcharge ou une conversion ?
Oui:-).
En fait, l'expression de contrôle du switch peut être de type entier, de type enum ou d'un type classe pour lequel il existe une (et une seule) conversion vers un type entier ou un type enum. Si c'est de type classe, la conversion aurait lieu. Ensuite, il y a « promotion » : c-à-d en gros que pour un type entier plus petit qu'un int, il y a conversion en int.
Donc Fabien avait raison : sitch, c'est bien avec les int, avec conversion vers int le cas échéant ?
Ça dépend de l'expression de contrôle. Si le type de l'expression est long, par exemple, ou unsigned il n'y a pas de conversion, et les constantes sont converties en long ou unsigned. (Question intéressante : donnée une implémentation où le résultat d'une conversion vers signé qui ne passe pas génère un signal, qu'est-ce qui se passe si l'expression de contrôle est un long, et une des constantes est un unsigned qui ne passe pas dans un long, disons 0x80000000U sur une machine 32 bits ?)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Christophe Lephay
a écrit dans le message de news:
"Christophe Lephay" wrote in message
Donc Fabien avait raison : sitch, c'est bien avec les int, avec conversion vers int le cas échéant ?
Ça dépend de l'expression de contrôle. Si le type de l'expression est long, par exemple, ou unsigned il n'y a pas de conversion, et les constantes sont converties en long ou unsigned.
Ok, merci...
(Question intéressante : donnée une implémentation où le résultat d'une conversion vers signé qui ne passe pas génère un signal, qu'est-ce qui se passe si l'expression de contrôle est un long, et une des constantes est un unsigned qui ne passe pas dans un long, disons 0x80000000U sur une machine 32 bits ?)
C'est pas moi qui répondrait à cette question... :)
Chris
<kanze@gabi-soft.fr> a écrit dans le message de
news:d6652001.0309252231.393af6d3@posting.google.com...
"Christophe Lephay" <christophe-lephay@wanadoo.fr> wrote in message
Donc Fabien avait raison : sitch, c'est bien avec les int, avec
conversion vers int le cas échéant ?
Ça dépend de l'expression de contrôle. Si le type de l'expression est
long, par exemple, ou unsigned il n'y a pas de conversion, et les
constantes sont converties en long ou unsigned.
Ok, merci...
(Question intéressante :
donnée une implémentation où le résultat d'une conversion vers signé qui
ne passe pas génère un signal, qu'est-ce qui se passe si l'expression de
contrôle est un long, et une des constantes est un unsigned qui ne passe
pas dans un long, disons 0x80000000U sur une machine 32 bits ?)
C'est pas moi qui répondrait à cette question... :)
Donc Fabien avait raison : sitch, c'est bien avec les int, avec conversion vers int le cas échéant ?
Ça dépend de l'expression de contrôle. Si le type de l'expression est long, par exemple, ou unsigned il n'y a pas de conversion, et les constantes sont converties en long ou unsigned.
Ok, merci...
(Question intéressante : donnée une implémentation où le résultat d'une conversion vers signé qui ne passe pas génère un signal, qu'est-ce qui se passe si l'expression de contrôle est un long, et une des constantes est un unsigned qui ne passe pas dans un long, disons 0x80000000U sur une machine 32 bits ?)
C'est pas moi qui répondrait à cette question... :)
Chris
Nophké
Bonjour, existe-t-il dans les lib std du C++ un moyen pour comparer deux string, et que le test sois case insensitive ?
if ( "NAME" == "name" ) return TRUE;
NON!
Cependant...
Les caractères minuscules ont les codes ascii de 97(a) à 122(z). Les caractères majuscules ont les codes ascii 65(A) à 96(Z). La différence entre un caractère minuscule et majuscule est de 32.
char a = 'A'; // identique à " char a = 97 " char b = 'a'; // identique à " char b = 65 " char c = (a - 32); // passe A en minuscule
Pour l'instant c'est tres facile! Bon maintenant!
Prenons un tableau char tableau[5+1];
for (i=0;i=5;i++){ if (tableau[i] > 64 && tableau[i] < 97) tableau[i] +2; } Ceci passe ton tableau en minuscules !
for (i=0;i=5;i++){ if (tableau[i] > 96 && tableau[i] < 122) tableau[i] +2 ; } Ceci passe ton tableau en majuscules !
Facile? Non? Il ne te reste plus qu'à comparer!
merci
Je t'en prie!
Bonjour,
existe-t-il dans les lib std
du C++ un moyen pour comparer deux
string, et que le test sois case
insensitive ?
if ( "NAME" == "name" )
return TRUE;
NON!
Cependant...
Les caractères minuscules ont les codes ascii de 97(a) à 122(z).
Les caractères majuscules ont les codes ascii 65(A) à 96(Z).
La différence entre un caractère minuscule et majuscule est de 32.
char a = 'A'; // identique à " char a = 97 "
char b = 'a'; // identique à " char b = 65 "
char c = (a - 32); // passe A en minuscule
Pour l'instant c'est tres facile! Bon maintenant!
Prenons un tableau char tableau[5+1];
for (i=0;i=5;i++){
if (tableau[i] > 64 && tableau[i] < 97)
tableau[i] +2;
}
Ceci passe ton tableau en minuscules !
for (i=0;i=5;i++){
if (tableau[i] > 96 && tableau[i] < 122)
tableau[i] +2 ;
}
Ceci passe ton tableau en majuscules !
Bonjour, existe-t-il dans les lib std du C++ un moyen pour comparer deux string, et que le test sois case insensitive ?
if ( "NAME" == "name" ) return TRUE;
NON!
Cependant...
Les caractères minuscules ont les codes ascii de 97(a) à 122(z). Les caractères majuscules ont les codes ascii 65(A) à 96(Z). La différence entre un caractère minuscule et majuscule est de 32.
char a = 'A'; // identique à " char a = 97 " char b = 'a'; // identique à " char b = 65 " char c = (a - 32); // passe A en minuscule
Pour l'instant c'est tres facile! Bon maintenant!
Prenons un tableau char tableau[5+1];
for (i=0;i=5;i++){ if (tableau[i] > 64 && tableau[i] < 97) tableau[i] +2; } Ceci passe ton tableau en minuscules !
for (i=0;i=5;i++){ if (tableau[i] > 96 && tableau[i] < 122) tableau[i] +2 ; } Ceci passe ton tableau en majuscules !
Facile? Non? Il ne te reste plus qu'à comparer!
merci
Je t'en prie!
Luc Hermitte
Salut,
"Nophké" wrote in news:3f7acf48$0$28886 $:
La différence entre un caractère minuscule et majuscule est de 32.
Quitte à vouloir se la jouer, on fait carrément un "ou logique". Mais bon, cette approche n'est pas valable avec tous les environnements et ne tiens pas compte de la langue.
Le problème n'est pas aussi simpliste, cf les autres branches de cette enfilade.
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
Salut,
"Nophké" <nophke.web@free.fr_PAS_DE_SPAM> wrote in news:3f7acf48$0$28886
$626a54ce@news.free.fr:
La différence entre un caractère minuscule et majuscule est de 32.
Quitte à vouloir se la jouer, on fait carrément un "ou logique".
Mais bon, cette approche n'est pas valable avec tous les environnements et
ne tiens pas compte de la langue.
Le problème n'est pas aussi simpliste, cf les autres branches de cette
enfilade.
--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>
La différence entre un caractère minuscule et majuscule est de 32.
Quitte à vouloir se la jouer, on fait carrément un "ou logique". Mais bon, cette approche n'est pas valable avec tous les environnements et ne tiens pas compte de la langue.
Le problème n'est pas aussi simpliste, cf les autres branches de cette enfilade.
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
kanze
"Nophké" wrote in message news:<3f7acf48$0$28886$...
existe-t-il dans les lib std du C++ un moyen pour comparer deux string, et que le test sois case insensitive ?
if ( "NAME" == "name" ) return TRUE;
NON!
Cependant...
Les caractères minuscules ont les codes ascii de 97(a) à 122(z). Les caractères majuscules ont les codes ascii 65(A) à 96(Z).
C'est vrai, mais je ne connais pas de machine aujourd'hui qui utilise l'ASCII. Le encodage dépend toujours du locale, mais la plupart du temps, le défaut, c'est ISO 8859-1 ou ISO 8859-15. Sur les systèmes les plus avancés, on trouve plutôt UTF-8.
La différence entre un caractère minuscule et majuscule est de 32.
En ASCII. Non en ISO 8859-15 (qui est en voie de devenir l'encodage le plus répandu, malgré les avantages réels de UTF-8). Et surtout non en UTF-8.
En plus, sur la plupart des système, char est 8 bits, signé. Ce qui veut dire qu'il faut tenir compte du fait que certains caractères ont en réalité des valeurs négatives.
char a = 'A'; // identique à " char a = 97 " char b = 'a'; // identique à " char b = 65 " char c = (a - 32); // passe A en minuscule
Pour l'instant c'est tres facile! Bon maintenant!
J'adore ce façon de démontrer une chose. Pour un caractère, dans un encodage précis, la différence entre majuscule et minuscule est 32. Donc, pour tous les caractères, dans tous les encodages, la différence est 32.
(Faut croire qu'il ne s'est jamais servi de EBCDIC:-).)
Prenons un tableau char tableau[5+1];
for (i=0;i=5;i++){ if (tableau[i] > 64 && tableau[i] < 97) tableau[i] +2; } Ceci passe ton tableau en minuscules !
Pas sur mes systèmes (Sun Solaris 2.8, Mandrake Linux 8.2 et Windows NT 4.0).
for (i=0;i=5;i++){ if (tableau[i] > 96 && tableau[i] < 122) tableau[i] +2 ; } Ceci passe ton tableau en majuscules !
Facile? Non?
Les solutions qui ne marche pas sont souvent faciles.
Dans ce cas-ci, pour les encodages courants en Europe, autre que UTF-8, et pour une défintion appropriée de la conversion (définition qui pourrait à la rigueur convenir en France, mais pas en Allemagne), il y a bien une solution facile : un tableau avec 256 entrées, convenablement initialisé. C'est la solution classique, depuis l'époque de l'ASCII. Aujourd'hui, on lui reconnaît ses desavantages, comme le fait de ne pas fonctionner avec UTF-8, mais même les problèmes avec 'ß'. Le problème n'est pas facile, MAIS... ça a déjà été résolu par d'autres. Plutôt que de réinventer la roue (mais carré, cette fois-ci), il faudrait régarder du côté std::collate, ou si ta bibliothèque n'est pas à jour, la fonction C stdcoll.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Nophké" <nophke.web@free.fr_PAS_DE_SPAM> wrote in message
news:<3f7acf48$0$28886$626a54ce@news.free.fr>...
existe-t-il dans les lib std du C++ un moyen pour comparer deux
string, et que le test sois case insensitive ?
if ( "NAME" == "name" )
return TRUE;
NON!
Cependant...
Les caractères minuscules ont les codes ascii de 97(a) à 122(z).
Les caractères majuscules ont les codes ascii 65(A) à 96(Z).
C'est vrai, mais je ne connais pas de machine aujourd'hui qui utilise
l'ASCII. Le encodage dépend toujours du locale, mais la plupart du
temps, le défaut, c'est ISO 8859-1 ou ISO 8859-15. Sur les systèmes les
plus avancés, on trouve plutôt UTF-8.
La différence entre un caractère minuscule et majuscule est de 32.
En ASCII. Non en ISO 8859-15 (qui est en voie de devenir l'encodage le
plus répandu, malgré les avantages réels de UTF-8). Et surtout non en
UTF-8.
En plus, sur la plupart des système, char est 8 bits, signé. Ce qui veut
dire qu'il faut tenir compte du fait que certains caractères ont en
réalité des valeurs négatives.
char a = 'A'; // identique à " char a = 97 "
char b = 'a'; // identique à " char b = 65 "
char c = (a - 32); // passe A en minuscule
Pour l'instant c'est tres facile! Bon maintenant!
J'adore ce façon de démontrer une chose. Pour un caractère, dans un
encodage précis, la différence entre majuscule et minuscule est
32. Donc, pour tous les caractères, dans tous les encodages, la
différence est 32.
(Faut croire qu'il ne s'est jamais servi de EBCDIC:-).)
Prenons un tableau char tableau[5+1];
for (i=0;i=5;i++){
if (tableau[i] > 64 && tableau[i] < 97)
tableau[i] +2;
}
Ceci passe ton tableau en minuscules !
Pas sur mes systèmes (Sun Solaris 2.8, Mandrake Linux 8.2 et Windows NT
4.0).
for (i=0;i=5;i++){
if (tableau[i] > 96 && tableau[i] < 122)
tableau[i] +2 ;
}
Ceci passe ton tableau en majuscules !
Facile? Non?
Les solutions qui ne marche pas sont souvent faciles.
Dans ce cas-ci, pour les encodages courants en Europe, autre que UTF-8,
et pour une défintion appropriée de la conversion (définition qui
pourrait à la rigueur convenir en France, mais pas en Allemagne), il y a
bien une solution facile : un tableau avec 256 entrées, convenablement
initialisé. C'est la solution classique, depuis l'époque de l'ASCII.
Aujourd'hui, on lui reconnaît ses desavantages, comme le fait de ne pas
fonctionner avec UTF-8, mais même les problèmes avec 'ß'. Le problème
n'est pas facile, MAIS... ça a déjà été résolu par d'autres. Plutôt que
de réinventer la roue (mais carré, cette fois-ci), il faudrait régarder
du côté std::collate, ou si ta bibliothèque n'est pas à jour, la
fonction C stdcoll.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Nophké" wrote in message news:<3f7acf48$0$28886$...
existe-t-il dans les lib std du C++ un moyen pour comparer deux string, et que le test sois case insensitive ?
if ( "NAME" == "name" ) return TRUE;
NON!
Cependant...
Les caractères minuscules ont les codes ascii de 97(a) à 122(z). Les caractères majuscules ont les codes ascii 65(A) à 96(Z).
C'est vrai, mais je ne connais pas de machine aujourd'hui qui utilise l'ASCII. Le encodage dépend toujours du locale, mais la plupart du temps, le défaut, c'est ISO 8859-1 ou ISO 8859-15. Sur les systèmes les plus avancés, on trouve plutôt UTF-8.
La différence entre un caractère minuscule et majuscule est de 32.
En ASCII. Non en ISO 8859-15 (qui est en voie de devenir l'encodage le plus répandu, malgré les avantages réels de UTF-8). Et surtout non en UTF-8.
En plus, sur la plupart des système, char est 8 bits, signé. Ce qui veut dire qu'il faut tenir compte du fait que certains caractères ont en réalité des valeurs négatives.
char a = 'A'; // identique à " char a = 97 " char b = 'a'; // identique à " char b = 65 " char c = (a - 32); // passe A en minuscule
Pour l'instant c'est tres facile! Bon maintenant!
J'adore ce façon de démontrer une chose. Pour un caractère, dans un encodage précis, la différence entre majuscule et minuscule est 32. Donc, pour tous les caractères, dans tous les encodages, la différence est 32.
(Faut croire qu'il ne s'est jamais servi de EBCDIC:-).)
Prenons un tableau char tableau[5+1];
for (i=0;i=5;i++){ if (tableau[i] > 64 && tableau[i] < 97) tableau[i] +2; } Ceci passe ton tableau en minuscules !
Pas sur mes systèmes (Sun Solaris 2.8, Mandrake Linux 8.2 et Windows NT 4.0).
for (i=0;i=5;i++){ if (tableau[i] > 96 && tableau[i] < 122) tableau[i] +2 ; } Ceci passe ton tableau en majuscules !
Facile? Non?
Les solutions qui ne marche pas sont souvent faciles.
Dans ce cas-ci, pour les encodages courants en Europe, autre que UTF-8, et pour une défintion appropriée de la conversion (définition qui pourrait à la rigueur convenir en France, mais pas en Allemagne), il y a bien une solution facile : un tableau avec 256 entrées, convenablement initialisé. C'est la solution classique, depuis l'époque de l'ASCII. Aujourd'hui, on lui reconnaît ses desavantages, comme le fait de ne pas fonctionner avec UTF-8, mais même les problèmes avec 'ß'. Le problème n'est pas facile, MAIS... ça a déjà été résolu par d'autres. Plutôt que de réinventer la roue (mais carré, cette fois-ci), il faudrait régarder du côté std::collate, ou si ta bibliothèque n'est pas à jour, la fonction C stdcoll.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16