Ich habe versucht, std::tolower()
mit einem anderen Gebietsschema aufzurufen, aber es scheint, dass etwas schief läuft. Mein Code ist wie folgt:
Wenn ich also versuche, dieses Programm auszuführen, bekomme ich:
%Vor% Obwohl die Ausführung von return std::tolower(c);
einwandfrei funktioniert, werden nur die Standardzeichen in niedrigere und nicht É
konvertiert.
Ich habe einige Threads, die dieselbe Funktion gleichzeitig ausführen, C ++ 11 verwenden und mit g ++ kompilieren (falls es etwas damit zu tun hat).
Ich habe mich gefragt, ob dies der richtige Weg ist, um zu implementieren, was ich tun möchte, oder es gibt eine andere Möglichkeit, es zu tun.
Danke!
Überprüfen Sie, ob das Gebietsschema, das Sie verwenden möchten, auf Ihrem System installiert ist. Zum Beispiel muss ich das spanische Gebietsschema installieren, bevor der Code nicht mehr abstürzt.
Zusätzlich könnten Sie stattdessen mit wstring
arbeiten.
Update : Nach einigem Graben hier ist eine gute Erklärung für die Verwendung von wstring
- alle Nachteile und Procs (Nachteile meist).
Ausgabe:
%Vor% Im Gegensatz zur Version von tolower
, die von C stammt (Zeichen werden in unsigned
char und dann in int
konvertiert), wird die <locale>
version von tolower
direkt mit Zeichen aufgerufen. Es ist definiert, das std::ctype<charT>
-Facet des Gebietsschemas zu verwenden, und die nur zwei std::ctype
Spezialisierungen garantiert verfügbar sind std::ctype<char>
und std::ctype<wchar_t>
. Also:
Beachten Sie, dass dies immer noch ein char
-by- char
transform ist; Wenn das Zeichen mehr als ein Byte belegt, ist es unwahrscheinlich, dass es richtig gehandhabt wird.