Autor
|
Tema: Quitar acentos de un string (Leído 16,881 veces)
|
user-marcos
Desconectado
Mensajes: 159
|
Necesito quitar acentos de un string, llevo 2 horas y he probado todo lo que se me ocurre, ya dudo hasta si es posible quitarlos con c++. ¿Se os ocurre algo?
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Los acentos los llevan solo las vocales, hay 5 vocales. Las vocales con acento representan 5 carácteres que están fuera del rango ASCII. printf("%d %d %d %d %d", 'á', 'é', 'í', 'ó', 'ú');
La salida es: Simplemente cuando encuentre un caracter con uno de esos valores lo tienes que sustituir por el caracter ASCII de la vocal sin acentuación. if(caracter==-31) { caracter='a'; }
Edito: o que leches, simplemente: if(caracter=='á') { caracter='a'; }
Creo haber entendido que quiere quitar los acentos para sustituirlos por vocales sin acentos. Si quieres eliminar los acentos de una cadena, utiliza este método para identificarlos y luego simplemente copia caracter a caracter en otra cadena, utilizando a ser posible reserva de memoria dinámica. Saludos.
|
|
« Última modificación: 10 Julio 2015, 00:18 am por Kaxperday »
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
user-marcos
Desconectado
Mensajes: 159
|
if( cadena == 'á')
no se puede, y ami me sale que las vocales con acento valen dos char
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Pero que quieres hacer, ¿eliminar los acentos o cambiar los carácteres por vocales sin acento? Edito: no puedes igualar una cadena a un caracter. Tendrías que coger un elemento de la cadena, ejemplo cadena[0]. Saludos. Prueba esto: string cadena = "hola quiero eliminar los caráceteres acentuados de ésta cadéna"; remove(cadena.begin(), cadena.end(), 'á'); remove(cadena.begin(), cadena.end(), 'é'); remove(cadena.begin(), cadena.end(), 'í'); remove(cadena.begin(), cadena.end(), 'ó'); remove(cadena.begin(), cadena.end(), 'ù'); printf("%s", cadena.c_str());
Salida: hola quiero eliminar los carceteres acentuados de sta cadna
|
|
« Última modificación: 10 Julio 2015, 00:33 am por Kaxperday »
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
user-marcos
Desconectado
Mensajes: 159
|
El objetivo el transformar unas 15000 urls, quiero quitar acentos de mayúsculas, minúsculas y la ñ, el problema los acentos no caben en un char y por eso no se puede comparar.
|
|
« Última modificación: 10 Julio 2015, 00:29 am por user-marcos »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
void quitarAcentos(std::string &str){ static const std::string t = "aáàâäeéèêëiíìîïoóòôöuúùûüAÁÀÄEÉÈÊËIÍÌÎÏOÓÒÔÖUÚÙÛÜnññññNÑÑÑÑ"; static const unsigned char n = 5; // Numero de acentos diferentes (+ base) por vocal for(int i=0; i<str.size(); i++){ size_t pos = t.find(str[i]); if(pos!=std::string::npos){ str[i] = t[(pos/n)*n]; } } }
EDITO: La A mayúscula con acento circulflejo (^) no se ve. Acuerdate de añadirla si usas este código.
|
|
« Última modificación: 10 Julio 2015, 00:36 am por ivancea96 »
|
En línea
|
|
|
|
Stakewinner00
|
Si el objetivo es que solo haya chars ASCII valdría algo como #include <iostream> #include <string> int main() { std::string s; std::cin >> s; for(unsigned c : s) if(c < 127) std::cout << char(c); }
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
if( cadena == 'á')
no se puede, y ami me sale que las vocales con acento valen dos char Pasa el error que te lanza, para saber todos los datos.
|
|
|
En línea
|
|
|
|
user-marcos
Desconectado
Mensajes: 159
|
Pasa el error que te lanza, para saber todos los datos.
Eso es lo mismo que hacer int n; if ( n == 5.55)
esta fuera de rango
|
|
|
En línea
|
|
|
|
user-marcos
Desconectado
Mensajes: 159
|
void quitarAcentos(std::string &str){ static const std::string t = "aáàâäeéèêëiíìîïoóòôöuúùûüAÁÀÄEÉÈÊËIÍÌÎÏOÓÒÔÖUÚÙÛÜnññññNÑÑÑÑ"; static const unsigned char n = 5; // Numero de acentos diferentes (+ base) por vocal for(int i=0; i<str.size(); i++){ size_t pos = t.find(str[i]); if(pos!=std::string::npos){ str[i] = t[(pos/n)*n]; } } }
EDITO: La A mayúscula con acento circulflejo (^) no se ve. Acuerdate de añadirla si usas este código. string s = "áéíóú"; quitarAcentos(s); cout << s; //salida ->aaa�a�a�a�
Empiezo a pensar que el problema lo tengo en el ordenador, quizá me falte instalar más codificaciones.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Quitar caracteres a una string
Programación Visual Basic
|
W3XT3R
|
5
|
5,464
|
25 Diciembre 2005, 22:59 pm
por Kizar
|
|
|
[Solucionado] Comparar un String con cada una de las partes de otro String
« 1 2 »
.NET (C#, VB.NET, ASP)
|
Segurida
|
13
|
12,531
|
14 Mayo 2011, 18:52 pm
por Segurida
|
|
|
como puedo hacer q mi JTextArea me imprima mas de un dato string datos string
Dudas Generales
|
alda19
|
1
|
5,693
|
15 Junio 2011, 03:18 am
por Novlucker
|
|
|
C# Quitar acentuación de String (Nueva duda)
.NET (C#, VB.NET, ASP)
|
n-utz
|
4
|
7,806
|
14 Julio 2017, 01:14 am
por Eleкtro
|
|
|
Quitar comillas de un string - python
Scripting
|
painpills
|
1
|
3,065
|
23 Junio 2021, 19:23 pm
por Danielㅤ
|
|