문제

나는 어제 비슷한 질문을했지만 다른 방식으로 다시 바라야한다는 것을 인식합니다.

간단히 말해 : Windows의 C ++에서 문자열이 유니 코드 형식 (Wide Char, WCHAR_T) 일 때 문자열 (다른 문자열 내부)에 대한 대소 문자열 검색을 어떻게 수행합니까? . 바늘이 건초 더미에 존재하는지 알고 싶습니다. 바늘의 위치는 나와 관련이 없습니다.

배경 : 많은 이메일 본문이 포함 된 저장소가 있습니다. 메시지는 다른 언어로되어 있습니다 (일본어, 독일어, 러시아어, 핀란드; 이름을 지정합니다). 모든 데이터는 유니 코드 형식이며 C ++ 응용 프로그램에서 넓은 문자열 (WCHAR_T)에로드합니다 (신체는 마임 디코딩되었으므로 디버거에서 실제 일본어 독일 문자를 볼 수 있습니다). 이메일 메시지에는 해당 세부 사항이 포함되어 있지 않기 때문에 메시지의 언어를 모르겠습니다. 단일 이메일 본문에는 여러 언어의 문자가 포함될 수 있습니다.

나는 WCSSTR과 같은 것을 찾고 있지만, 사례에서 검색을 수행 할 수있는 능력이 있습니다. 텍스트의 언어를 알지 못하고 대문자에서 소문자로 100% 적절한 변환을 할 수 없다는 것을 알고 있습니다. 가능한 99%의 경우에 작동하는 솔루션을 원합니다.

C ++, STL 및 Boost와 함께 Visual Studio 2008을 사용하고 있습니다.

도움이 되었습니까?

해결책

부스트 스트링 알고리즘에는 다음에 있습니다 iContains () 필요한 작업을 수행 할 수있는 함수 템플릿.

다른 팁

사례의 무의미한 비교를 위해 언어를 지정해야합니다. 예를 들어 터키에서 'I'는 'i'에 해당하는 소문자가 아닙니다. 언어가 지정되지 않은 것으로 보이면 암시 적으로 선택된 언어로 비교가 이루어지고 있습니다.

당신은 사용해야합니다 ICU 라이브러리 이는 유니 코드 정규 표현식을 지원하는 경우 유니 코드 규칙을 따릅니다. 라이브러리는 C/C ++ 및 Java 라이브러리로 제공됩니다. Python과 같은 다른 많은 언어는 ICU 라이브러리의 래퍼를 지원합니다.

바늘과 건초 더미를 소문자 (또는 대문자)로 변환 한 다음 wcsstr ()를 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top