Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOIS en 20 Noviembre 2014, 09:29 am



Título: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: NOIS en 20 Noviembre 2014, 09:29 am
Hola, estoy realizando un programa de cifrado y desencriptación, explico.

El nivel 1 de dicho programa solo modifica los caracteres 1 a 1 con el mismo algoritmo, y de este modo no tengo ningún error a la hora de cifrar o descifrar caracteres especiales.

En el nivel 2, en una de las fases convierto los caracteres a cadenas. Si los caracteres son convencionales funciona perfectamente, pero si son vocales con tilde o la letra 'ñ' el programa se detiene inesperadamente.

¿Como podría solucionar esto?

Gracias de antemano.


Título: Re:
Publicado por: ivancea96 en 20 Noviembre 2014, 10:02 am
Poco se puede hacer si no das más datos


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: NOIS en 20 Noviembre 2014, 10:39 am
No creo que hagan falta más datos, lo que necesito es habilitar o hacer compatible de algún modo el alfabeto español dentro del programa para que no me de error.


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: ivancea96 en 20 Noviembre 2014, 15:09 pm
Sin saber ningún dato del error ni de la linea que lo genera, pues. Tampoco sé que es convertir un caracters a cadena. (? 'a' -> "a" ?)


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: _Enko en 20 Noviembre 2014, 16:47 pm
Pues creo que la solución es utilizar codificación UNICODE. Si mal no recuerdo la librería era wchar.h

http://www.cplusplus.com/reference/cwchar/

Pero tambien vas a tener que guardar el codigo fuente como UNICODE y tambien agregar parametros al compilador.


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: MeCraniDOS en 20 Noviembre 2014, 17:11 pm
No creo que hagan falta más datos

Que tal el código para poder ver por donde te puede fallar?  :rolleyes:

Saludos




Utiliza la tabla Ascii, la ñ es el numero 164, y la Ñ el 165, busca las tildes etc, y reemplazalas por las letras sin tildes  :D


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: NOIS en 20 Noviembre 2014, 22:20 pm
Pues creo que la solución es utilizar codificación UNICODE. Si mal no recuerdo la librería era wchar.h

http://www.cplusplus.com/reference/cwchar/

Pero tambien vas a tener que guardar el codigo fuente como UNICODE y tambien agregar parametros al compilador.

Gracias, le echaré un vistazo.
____________________________________________________________________
Sin saber ningún dato del error ni de la linea que lo genera, pues. Tampoco sé que es convertir un caracters a cadena. (? 'a' -> "a" ?)

Con convertir en una cadena me refiero a que yo he creado algo como esto:
Código
  1. using namespace std;
  2. ...
  3. string conversion[256]={ "aaa","bbb","ccc","..."};
  4.  
y si el valor del caracter registrado es 25 lo sustituye por el la cadena nº 25 de "conversion".


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: ivancea96 en 20 Noviembre 2014, 23:00 pm
Puede que en consola se muestran mal las tildes y lo que sea. Pero nunca he tenido un error ni un fallo de ningún tipo por culpa de eso.


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: NOIS en 21 Noviembre 2014, 08:44 am
Ya, por eso no entiendo que pueda manipular caracteres sin problemas pero no caracteres y cadenas cuando encuentra un caracter especial.


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: ivancea96 en 21 Noviembre 2014, 14:01 pm
De verdad, insisto en que pongas el fragmento de código en el que da el error, el fragmento en el que declaras las variables implicadas. Una base para ver si es un error lógico de algún tipo.


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: leosansan en 21 Noviembre 2014, 20:49 pm
Hola, estoy realizando un programa de cifrado y desencriptación, explico.
.................................................................
En el nivel 2, en una de las fases convierto los caracteres a cadenas. Si los caracteres son convencionales funciona perfectamente, pero si son vocales con tilde o la letra 'ñ' el programa se detiene inesperadamente.

¿Como podría solucionar esto?


¿ Has probado a usar el teclado en español ?. Te pongo un ejemplo de su uso:

Código
  1. #include<stdio.h>
  2. #include<locale.h>
  3.  
  4. int main(void){
  5.  setlocale(LC_ALL, "Spanish");
  6.  printf ("¡Hola leoñanñan! ¿Cuántos tenía años la canción número 2²?\n");
  7.  printf ("2+3.5=%f  \n",2+3.5);
  8.  float a=2.75+3.5;
  9.  printf ("Observa la coma en lugar del punto para marcar los decimales: %g\n",a);
  10.  float b=a*a;
  11.  printf ("b=%f\n",b);
  12.  printf ("¡Ño! enésima \n");
  13.  return 0;
  14. }

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: NOIS en 21 Noviembre 2014, 23:39 pm
Si, buscando por internet encontré esa solución con la librería locale.h, pero me da error. No encontré nada de que hubiera que linkear ninguna librería al proyecto ni nada parecido.


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: _Enko en 22 Noviembre 2014, 00:15 am
Mh... creo que para tu caso te basta con usar el codigo asccii

Código:
printf("esp: \xA0\xA1\xA2\xA3\xA4\xA5");
De resultado te da
Citar
esp: áíóúñÑ

Saludos


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: Orubatosu en 22 Noviembre 2014, 18:54 pm
Si, buscando por internet encontré esa solución con la librería locale.h, pero me da error. No encontré nada de que hubiera que linkear ninguna librería al proyecto ni nada parecido.

Desde mi modestísimo conocimiento (aún estoy aprendiendo de forma autodidacta C++) creo que puedo darte una posible solución

Pones obviamente la cabecera "<clocale>

Y en la primera línea del "Main"

Código:
#include <iostream>
#include <clocale>
using namespace std;

int main(){
    setlocale(LC_ALL, "");

}

Esto hace que uses el "locale" en el que actualmente se encuentre tu equipo. Y modificando algunos valores en el setlocale puedes también cambiar a un país específico, pero no he llegado tan lejos.

He probado manipulando cadenas de diferentes maneras, que incluyen acentos o "ñ", como meterlas en strings, vectores, etc... y me funciona, igualmente me permite mostrarlos por consola.

Supongo que hay mejores formas, pero esta de momento me funciona, si te funciona para lo que quieres, mejor que mejor


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: zShackra en 23 Noviembre 2014, 05:04 am
Sucede a veces... que el compilador que manejas no te permite un correcto uso de la función setlocale, yo uso Visual Studio y funciona sin problemas.

Sólo como opinión, deberían incinerar todos esos compiladores y entornos obsoletos... tantas alternativas decentes y todavía la gente se empeña en usar Dev-C++ y Borland...


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: Orubatosu en 23 Noviembre 2014, 11:56 am
Un pequeño problema, es que por ejemplo en Linux no existe ese problema de acentos y caracteres "raros", mientras que en consola de DOS (en sistemas windows) si que existe.

La solución del Locale a mi al menos me funciona en sistemas windows, quizás es un poco "parche", pero mejor eso que nada.


Título: Re: [C++] Problema con vocales con tilde y caracteres especiales.
Publicado por: zShackra en 23 Noviembre 2014, 18:14 pm
Un pequeño problema, es que por ejemplo en Linux no existe ese problema de acentos y caracteres "raros", mientras que en consola de DOS (en sistemas windows) si que existe.

La solución del Locale a mi al menos me funciona en sistemas windows, quizás es un poco "parche", pero mejor eso que nada.


Para mí no es parche, si es estándar, está bien.