C ++ String in Kleinbuchstaben mit benutzerdefiniertem Gebietsschema

8

Ich habe versucht, std::tolower() mit einem anderen Gebietsschema aufzurufen, aber es scheint, dass etwas schief läuft. Mein Code ist wie folgt:

%Vor%

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!

    
lpares12 26.02.2017, 14:57
quelle

2 Antworten

1

Ü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).

%Vor%

Ausgabe:

%Vor%     
j2ko 26.02.2017, 15:32
quelle
2

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:

%Vor%

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.

    
T.C. 27.02.2017 14:18
quelle

Tags und Links