-
Map et clef accentuées
Dans une std::Map qui contient en clé un mot et une chaine associée, j'ai des problèmes avec les clés contenant un mot accentué.
La Map est chargée correctement dans l'ordre alphabétique, mais à la lecture tout se passe comme si find ( clé ) utilisait un ordre différend. Il ne trouve pas la clé, uniquement dans le cas où celle-ci est accentuée.
J'utilise un const_iterator, mais pas l'opérateur [] inapplicable dans ce cas.
Quelqun a-t-il une idée, une piste de recherche... les foncteurs peut-être, mais cela me parait bien compliqué.
PS : wxDevcpp sous XP.
-
La clé est bien entrée de la même manière dans l'ajout et dans la recherche ?
(Ex: Les deux saisies par l'utilisateur dans la console, ou les deux à partir d'un fichier, etc.).
N'oublie pas que la console n'utilise pas le même encodage que le reste sous Windows...
-
La Map est remplie à partir d'un fichier au moyen de getline().
Son affichage montre qu'elle est correctement remplie et ordonnée.
-
Et la clée à rechercher est obtenue comment ?
-
Les clés à rechercher sont des mots de la langue française faisant partie d'un fichier texte (un livre).
Par ailleurs il est possible que la clé soit mal transmise dans l'appel du sp de lecture de la Map. J'essaye de lever le doute.
-
Regarde si c'est bien le même charset.
-
J'ai toujours utilisé le jeu de caractères par défaut dans tous les pgm de mon application et jusqu'ici les lettres accentuées ne m'ont pas posé de problème.
-
Merci à tous les deux.
J'ai trouvé mon erreur : en enlevant les caractères non alphabétiques qui suivent la clé (ponctuation), j'enlevais mon 'é' final qui n'est pas considéré comme caractère alphabétique par le fonction ISALFA(). La clé passée à la Map était donc incorrecte!
-
Heu... c'est peut être bien le probleme, l'utilisation de la locale par défaut ! :D
IsAlpha() sont des fonctions de locale, et par défaut, en C, la locale est US... Donc IsAlpha() ne marche que pour des caractères non spéciaux (aucun autre que a-zA-Z quoi ! :D)
Tu peux utiliser de l'unicode pour tester si un caractère est de la ponctuation ou non, ou encore, spécifier au runtime, quelle locale il doit utiliser.