Remplacer des caractères dans une chaine et enlever certains
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:
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