Bonjour,

Il s'agit de remplacer les caractères accentués par des non accentués mais aussi enlever certains caractères de la chaine.
Pour cela, j'utilise donc un STD::MAP pour stocker les couples (accentué , non accentué) et (à_enlever , NULL).
Pour le remplacement des accentués, j'ai réussi à faire mais ce que je ne comprend pas c'est comment supprimer un caractère d'un std::string. Voici un bout de code que j'ai déjà écrit (STL sous Visual Studio)

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
std::string GetOracleClassTableName(std::string a_strTableName)
{
   std::string strTabName = a_strTableName;
   std::map<char,char> mapTrans;
 
   std::string strSource(" ûùéèêàâîïôöç,;:!§/.?&%¨^/*+&\"''()={[|`\\^@]}°µ-");
   std::string strDestination("_uueeeaaiiooc");
 
   unsigned int lenD = strDestination.length();
   for(unsigned int i = 0; i < strSource.length(); i++)
   {
      if (i < lenD)
         mapTrans[strSource[i]] = strDestination[i];
      else
         mapTrans[strSource[i]] = NULL;
   }
 
   for(unsigned int i = 0; i < strTabName.size(); i++)
   {
      std::map<char,char>::iterator it = mapTrans.find(strTabName[i]);
      if (it != mapTrans.end())
      {
         if (mapTrans[strTabName[i]])
         {
            strTabName[i] = mapTrans[strTabName[i]];
         }
         /*else
            strTabName*/
      }
   }
 
   /*if (wstrTabName.length() > 30)
   {
      wstrTabName.clear();
      wstrTabName = a_wstrTableName.substr(0,30);
   }*/
 
   return strTabName;
}//GetOracleClassTableName
 
void CTRANSLATE_In_CppDlg::OnBnClickedOk()
{
   std::string strTest = GetOracleClassTableName("élève contrôle à Paris sûr");
   CString str(strTest.c_str());
   AfxMessageBox(str);//afficher la chaine sans accents
}
Le résultat final que je cherche ce n'est pas en fait std::string mais std::wstring mais la conversion entre les deux, je ne sais pas