Bonjour à tous,

Compilateur : Visual C++ 2005
O.S : Windows XP


J'ai un problème que je n'arrive pas à résoudre avec la mise en majuscule d'un mot contenant des accents.

Voilà un code minimal qui reproduit le problème :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main(void)
{
    string first_name;
    cout << endl << "First Name : ";
    getline(cin, first_name);
 
    locale locl ("French_france");
    transform( first_name.begin(), first_name.end(), first_name.begin(), toupper );
 
     cout << endl << "First Name (uppercase) : " << first_name;
 
    return 0;
}
En débuggant, si j'entre "sébastien" je vois que le deuxième caractère de la string "first_name" vaut bien 0x82 (ASCII 'é'). Mais après le passage à la casse en majuscule, j'obtiens :

S*BASTIEN

Où '*' vaut toujours 0x82 et non 'E'.

Coment utiliser convenablement les locales ?

En vous remerciant.