C ++에서 넓은 숯 문자열을 소문자로 변환합니다
-
06-07-2019 - |
문제
C ++에서 WCHAR_T 문자열을 대문자에서 소문자로 변환하려면 어떻게합니까?
이 문자열에는 일본어, 중국어, 독일어 및 그리스 캐릭터가 혼합되어 있습니다.
나는 Towlower를 사용하는 것에 대해 생각했다 ...
http://msdn.microsoft.com/en-us/library/8h19t214%28vs.80%29.aspx
.. 그러나 문서는 다음과 같습니다.
Towlower의 사례 변환은 로케일에 따라 다릅니다. 현재 로케일과 관련된 캐릭터 만 할 경우를 대비하여 변경됩니다.
편집 : 아마도 내가하는 일을 설명해야 할 것입니다. 사용자로부터 유니 코드 검색 쿼리를받습니다. 원래 UTF-8 인코딩에 있지만 WideChar로 변환하고 있습니다 (문구에서 잘못 될 수 있습니다). 내 디버거 (vs2008)는 "가변적 인 빠른 시계"에있는 일본어, 독일어 등 캐릭터를 올바르게 보여줍니다. 유니 코드에서 다른 데이터 세트를 살펴보고 검색 문자열의 일치를 찾아야합니다. 검색이 사례에 민감 할 때해야 할 문제는 없지만, 케이스에 민감하지 않은 경우 더 문제가됩니다. 문제를 해결하기위한 (순진한) 접근 방식은 모든 입력 데이터와 출력 데이터를 소문자로 변환 한 다음 비교하는 것입니다.
다른 팁
당신은 불쾌한 문제가 있습니다. 일본 지역은 독일어를 전환하는 데 도움이되지 않으며 그 반대도 마찬가지입니다. 사로화의 개념이없는 언어가 있습니다.toupper
그리고 친구들은 여기서 No-Op가 될 것입니다. 그렇다면 같은 언어에서 문자열을 개별 단어 덩어리로 나눌 수 있습니까? 가능하면 조각을 변환하고 묶을 수 있습니다.
이렇게 대답합니다 여러 지역에서 작업하기 위해 패싯으로 작업하는 방법을 보여줍니다. 이것이 Windows에 있으면 Win32 API 기능 사용을 고려할 수 있습니다. C ++에서 작업 할 수 있다면 NET (관리자 C ++)를 사용할 수 있습니다. char.ToLower
그리고 string.ToLower
유니 코드를 준수하는 함수.
살펴보십시오 _wcslwr_l
안에 <wchar.h>
(MSDN).
각 로케일의 입력에서 함수를 실행할 수 있어야합니다.