elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Quitar acentos de un string
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Quitar acentos de un string  (Leído 16,881 veces)
user-marcos

Desconectado Desconectado

Mensajes: 159


Ver Perfil
Quitar acentos de un string
« en: 9 Julio 2015, 23:58 pm »

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 Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Quitar acentos de un string
« Respuesta #1 en: 10 Julio 2015, 00:11 am »

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.

Código
  1. printf("%d %d %d %d %d", 'á', 'é', 'í', 'ó', 'ú');

La salida es:

Código:
-31 -23 -19 -13 -6

Simplemente cuando encuentre un caracter con uno de esos valores lo tienes que sustituir por el caracter ASCII de la vocal sin acentuación.

Código
  1. if(caracter==-31)
  2. {
  3. caracter='a';
  4. }

Edito: o que leches, simplemente:

Código
  1. if(caracter=='á')
  2. {
  3. caracter='a';
  4. }

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 Desconectado

Mensajes: 159


Ver Perfil
Re: Quitar acentos de un string
« Respuesta #2 en: 10 Julio 2015, 00:22 am »

Código
  1. if( cadena == 'á')
  2.  
no se puede, y ami me sale que las vocales con acento valen dos char
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Quitar acentos de un string
« Respuesta #3 en: 10 Julio 2015, 00:26 am »

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:

Código
  1. string cadena = "hola quiero eliminar los caráceteres acentuados de ésta cadéna";
  2. remove(cadena.begin(), cadena.end(), 'á');
  3. remove(cadena.begin(), cadena.end(), 'é');
  4. remove(cadena.begin(), cadena.end(), 'í');
  5. remove(cadena.begin(), cadena.end(), 'ó');
  6. remove(cadena.begin(), cadena.end(), 'ù');
  7. printf("%s", cadena.c_str());

Salida:

Citar
hola quiero eliminar los carceteres acentuados de sta cadna

 :xD :xD :xD :xD
« Ú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 Desconectado

Mensajes: 159


Ver Perfil
Re: Quitar acentos de un string
« Respuesta #4 en: 10 Julio 2015, 00:27 am »

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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Quitar acentos de un string
« Respuesta #5 en: 10 Julio 2015, 00:32 am »

Código
  1. void quitarAcentos(std::string &str){
  2.    static const std::string t = "aáàâäeéèêëiíìîïoóòôöuúùûüAÁÀÄEÉÈÊËIÍÌÎÏOÓÒÔÖUÚÙÛÜnññññNÑÑÑÑ";
  3.    static const unsigned char n = 5; // Numero de acentos diferentes (+ base) por vocal
  4.    for(int i=0; i<str.size(); i++){
  5.        size_t pos = t.find(str[i]);
  6.        if(pos!=std::string::npos){
  7.            str[i] = t[(pos/n)*n];
  8.        }
  9.    }
  10. }

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


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Quitar acentos de un string
« Respuesta #6 en: 10 Julio 2015, 00:34 am »

Si el objetivo es que solo haya chars ASCII valdría algo como
Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. int main()
  5. {
  6.  std::string s;
  7.  std::cin >> s;
  8.  for(unsigned c : s)
  9.    if(c < 127)
  10.      std::cout << char(c);
  11. }
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Quitar acentos de un string
« Respuesta #7 en: 10 Julio 2015, 00:38 am »

Código
  1. if( cadena == 'á')
  2.  
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 Desconectado

Mensajes: 159


Ver Perfil
Re: Quitar acentos de un string
« Respuesta #8 en: 10 Julio 2015, 00:45 am »

Pasa el error que te lanza, para saber todos los datos.
Eso es lo mismo que hacer
Código
  1. int n;
  2. if ( n == 5.55)
esta fuera de rango
En línea

user-marcos

Desconectado Desconectado

Mensajes: 159


Ver Perfil
Re: Quitar acentos de un string
« Respuesta #9 en: 10 Julio 2015, 00:47 am »

Código
  1. void quitarAcentos(std::string &str){
  2.    static const std::string t = "aáàâäeéèêëiíìîïoóòôöuúùûüAÁÀÄEÉÈÊËIÍÌÎÏOÓÒÔÖUÚÙÛÜnññññNÑÑÑÑ";
  3.    static const unsigned char n = 5; // Numero de acentos diferentes (+ base) por vocal
  4.    for(int i=0; i<str.size(); i++){
  5.        size_t pos = t.find(str[i]);
  6.        if(pos!=std::string::npos){
  7.            str[i] = t[(pos/n)*n];
  8.        }
  9.    }
  10. }

EDITO: La A mayúscula con acento circulflejo (^) no se ve. Acuerdate de añadirla si usas este código.

Código
  1.  string s = "áéíóú";
  2.  quitarAcentos(s);
  3.  cout << s;
  4. //salida ->aaa&#65533;a&#65533;a&#65533;a&#65533;
  5.  
Empiezo a pensar que el problema lo tengo en el ordenador, quizá me falte instalar más codificaciones.
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines