Tengo un problema con una cadena en C++ que tiene varias palabras en español. Esto significa que tengo muchas palabras con acentos y tildes. Quiero reemplazarlos por sus homólogos no acentuados. Ejemplo: Quiero reemplazar esta palabra: "había" por habia. Intenté reemplazarlo directamente pero con reemplazar el método de la clase de cadena, pero no pude hacer que funcionara.Cómo eliminar acentos y tilde en C++ std :: string
Estoy usando este código:
for (it= dictionary.begin(); it != dictionary.end(); it++)
{
strMine=(it->first);
found=toReplace.find_first_of(strMine);
while (found!=std::string::npos)
{
strAux=(it->second);
toReplace.erase(found,strMine.length());
toReplace.insert(found,strAux);
found=toReplace.find_first_of(strMine,found+1);
}
}
Dónde dictionary
es un mapa como éste (con más entradas):
dictionary.insert (std::pair<std::string,std::string>("á","a"));
dictionary.insert (std::pair<std::string,std::string>("é","e"));
dictionary.insert (std::pair<std::string,std::string>("í","i"));
dictionary.insert (std::pair<std::string,std::string>("ó","o"));
dictionary.insert (std::pair<std::string,std::string>("ú","u"));
dictionary.insert (std::pair<std::string,std::string>("ñ","n"));
y toReplace
cuerdas es:
std::string toReplace="á-é-í-ó-ú-ñ-á-é-í-ó-ú-ñ";
Obviamente debo estar perdiendo algo. No puedo resolverlo. ¿Hay alguna biblioteca que pueda usar?
Gracias,
Debe agregar la plataforma a la que se dirige (Windows, Linux, etc.) y la codificación a la que se dirige (UTF-8, UTF-16, lo que sea). Por ejemplo, su "á" es el glifo E1, que traduce "á" en USO-8859-1 char, L'á 'en UTF-16 wchar_t, pero "á" (sí, dos caracteres) en UTF-8 – paercebal
Lo siento ... Para cuando volví a tu publicación (de buscar en Unicode.org) y validé el comentario, respondiste ... – paercebal
Este es un duplicado de How do I translate 8bit characters into 7bit characters? (i.e. Ü to U) . – Jim