2017-12-08 12 views
0

역순으로 문자열을 쓰고 싶습니다. 그리고 문자열을 0에서 문자열 길이로 반복하여 cin과 문자열을 얻습니다. 문제는 내가 잘못 입력 한 터키 문자를 가져 오는 것입니다. 또한 1 개의 터키어 문자 문자열의 길이가 2 (즉 ömür이 갖는 길이 6)문자열에서 터키어 문자 가져 오기

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

예상 출력에 의해 증가 = RUMO => 제가 무엇을 얻을 R = ?? m ??

+0

'std :: wstring'을 사용해 보셨습니까? –

+0

https://stackoverflow.com/a/55650/50902 – kmkaplan

+0

UTF-8로 인코딩 된 유니 코드 문자열의 경우 '문자'는 인코딩 단위를 포함하고 문자는 아닙니다. 문자열의 역순을 출력하려면 다중''문자 인코딩 단위를 뒤집지 않아야합니다. 따라서 귀하의 논리는 인코딩 단위의 실행을 찾아야합니다. 좀 더 흥미로운 것을 만들기 위해 몇몇 글자체는 여러 유니 코드 코드 포인트로 표현됩니다. 당신의 코드는 유니 코드 문자들을 조합하는 그러한 시퀀스들을 처리해야한다. IBM은 이러한 작업을 수행 할 수있는 매우 훌륭한 라이브러리를 보유하고 있습니다 (kmkaplan의 설명 링크 참조). – Eljay

답변

1

문제는 현재 비 ASCII 문자는 2 바이트 이상을 차지한다는 것입니다 (C++ char). 가장 좋은 방법은 ICU과 같은 라이브러리를 사용하여 유니 코드를 정리하는 것입니다. 그러면 다음을 할 수 있습니다 :

#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; 
}