2017-12-08 2 views
0

Ich möchte eine Zeichenfolge in umgekehrter Reihenfolge schreiben, ich bekomme Zeichenfolge mit Cin und Iteration es für For-Schleife von Strings Länge auf 0. Problem ist, wenn ich türkischen Char nehme schreibt es falsch und auch 1 türkische char erhöht strings Länge von 2 (dh ömür hat Länge 6)bekommen türkische Zeichen von String

string text = "ömür"; 
for (int i = text.length() ; i >= 0; i--) 
{ 
    if(!isspace(text[i]) && text[i] != '\0') 
    { 
     cout<<text[i]; 
    } 
} 

Ausgang erwartet = RUMO => was ich bekommen = r ?? m ??

+0

Haben Sie versucht, 'std :: wstring' zu verwenden? –

+0

Siehe https://StackOverflow.com/a/55650/50902 – kmkaplan

+0

Für eine UTF-8-codierte Unicode-Zeichenfolge enthält ein Zeichen eine Codierungseinheit, nicht (unbedingt) ein Zeichen. Um die Umkehrung der Zeichenkette auszudrucken, müssen Sie die Multi-Zeichenzähleinheiten nicht umkehren. Also muss Ihre Logik Läufe von Kodiereinheiten finden. Interessanterweise werden einige Grapheme in mehreren Unicode-Codepunkten ausgedrückt. Ihr Code muss auch mit solchen Sequenzen umgehen, in denen Unicode-Zeichen kombiniert werden. IBM hat eine sehr schöne Bibliothek, um diese Dinge zu tun (siehe Link in kmkaplans Kommentar). – Eljay

Antwort

1

Das Problem ist, dass heutzutage Nicht-ASCII-Zeichen mehr als ein Byte belegen (C++ char). Am besten verwenden Sie eine Bibliothek wie ICU, die das Unicode-Material für Sie aussortiert. Sie könnten dann folgendes tun:

#include <unicode/unistr.h> 
#include <unicode/ustream.h> 
#include <iostream> 

int 
main(int argc, char **argv) 
{ 
    icu::UnicodeString text("ömür"); 
    text.reverse(); 
    std::cout << text; 
} 
Verwandte Themen