22/05/2015, 07:48
|
| | | Fecha de Ingreso: febrero-2015 Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 10 meses Puntos: 27 | |
Respuesta: tildes y acentuación en c++/linux Te explico: string es una cadena de char. wstring es una cadena de wchar.
Un char ocupa 1 byte, y por tanto puede codificar hasta 256 caracteres. Sin embargo, el estándar de c++ no obliga a meter los caracteres no propios de C como char, por tanto hay compiladores que no te dan soporte a las letras como la ñ, otros que te ponen los espaciales como caracteres negativas y otros a partir del 128.
wchar es un "cáracter ancho" por decirlo de alguna forma. En sistemas Windows un wchar ocupa 2 bytes, en linux 4 bytes y te permite codificar todos los caracteres extra y towupper te viene con todos las letras de todos los idiomas y sus mayúsculas. Ten en cuenta que esto es sólo un apaño para nada óptimo en programas grandes ya que consumes de 2 a 4 veces más.
A partir de C++11 existen tipos unicode con solo 2 bytes como char16_t y su correspondiente ustring16 y probablemente sea una aproximación más apropiada, pero cómo la gente no es muy dada a actualizar el compilador y había utilizado eso desde hace tiempo y sabía que funcionaba pues decidí ponerte esa solución.
Un saludo. |