Namespaces
Variants

std:: wcsxfrm

From cppreference.net
헤더 파일에 정의됨 <cwchar>
std:: size_t wcsxfrm ( wchar_t * dest, const wchar_t * src, std:: size_t count ) ;

src 가 가리키는 널 종료 와이드 문자열을 구현 정의 형태로 변환하여, 변환된 두 문자열을 std::wcscmp 로 비교한 결과가 원본 문자열을 현재 C 로캘에서 std::wcscoll 로 비교한 결과와 동일하도록 합니다.

변환된 문자열의 첫 번째 count 개의 문자는 종료 null 문자를 포함하여 대상에 기록되며, 전체 변환된 문자열의 길이는 종료 null 문자를 제외하고 반환됩니다.

만약 count 0 이면, dest 는 null 포인터가 될 수 있습니다.

목차

참고 사항

전체 변환된 문자열을 수신할 수 있는 올바른 버퍼의 길이는 1 + std :: wcsxfrm ( nullptr, src, 0 ) 입니다.

이 함수는 동일한 와이드 문자열 또는 와이드 문자열 집합을 사용하여 여러 로케일 의존 비교를 수행할 때 사용됩니다. 모든 문자열을 한 번만 변환하기 위해 std::wcsxfrm 을 사용하고, 이후 변환된 와이드 문자열을 std::wcscmp 로 비교하는 것이 더 효율적이기 때문입니다.

매개변수

dest - 변환된 문자열을 쓸 널 종료 와이드 문자열의 첫 번째 요소를 가리키는 포인터
src - 변환할 널 종료 와이드 문자 문자열을 가리키는 포인터
count - 출력할 최대 문자 수

반환값

변환된 와이드 문자열의 길이로, 종료 널 문자는 포함하지 않습니다.

예제

#include <cwchar>
#include <iostream>
int main()
{
    std::setlocale(LC_ALL, "sv_SE.utf8");
    std::wstring in1 = L"\u00e5r";
    std::wstring out1(1 + std::wcsxfrm(nullptr, in1.c_str(), 0), L' ');
    std::wstring in2 = L"\u00e4ngel";
    std::wstring out2(1 + std::wcsxfrm(nullptr, in2.c_str(), 0), L' ');
    std::wcsxfrm(&out1[0], in1.c_str(), out1.size());
    std::wcsxfrm(&out2[0], in2.c_str(), out2.size());
    std::wcout << "In the Swedish locale: ";
    if (out1 < out2)
        std::wcout << in1 << " before " << in2 << '\n';
    else
        std::wcout << in2 << " before " << in1 << '\n';
    std::wcout << "In lexicographical comparison: ";
    if (in1 < in2)
        std::wcout << in1 << " before " << in2 << '\n';
    else
        std::wcout << in2 << " before " << in1 << '\n';
}

출력:

In the Swedish locale: år before ängel
In lexicographical comparison: ängel before år

참고 항목

문자열을 변환하여 strcmp strcoll 와 동일한 결과를 생성하도록 함
(함수)
[virtual]
문자열을 변환하여 비교로 콜레이션(collation)을 대체할 수 있도록 함
( std::collate<CharT> 의 가상 protected 멤버 함수)
현재 로캘에 따라 두 와이드 문자열을 비교함
(함수)
C documentation for wcsxfrm