Ver Mensaje Individual
  #10 (permalink)  
Antiguo 22/05/2015, 07:48
Avatar de xKuZz
xKuZz
 
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 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.