名前空間
変種
操作

std::wcsxfrm

From cppreference.com
< cpp‎ | string‎ | wide
 
 
 
 
ヘッダ <cwchar> で定義
std::size_t wcsxfrm( wchar_t* dest, const wchar_t* src, std::size_t count );

src で指されるヌル終端ワイド文字列を、実装定義の形式に変換します。これにより、変換された2つの文字列を std::wcscmp で比較した結果が、元の文字列を std::wcscoll で比較した結果と同じになるようにします。これは現在の C ロケールで行われます。

変換された文字列の最初の count 文字が宛先に書き込まれ、終端のヌル文字も含まれます。完全な変換された文字列の長さ(終端のヌル文字を除く)が返されます。

count0 の場合、dest はヌルポインタでもかまいません。

目次

[edit] Notes

変換された文字列全体を受け取るバッファの正しい長さは、1 + std::wcsxfrm(nullptr, src, 0) です。

この関数は、同じワイド文字列またはワイド文字列のセットを使用して、ロケール依存の比較を複数回行う場合に使用されます。これは、すべての文字列を一度だけ std::wcsxfrm で変換し、その後、変換されたワイド文字列を std::wcscmp で比較する方が効率的であるためです。

[edit] Parameters

dest - 変換された文字列を書き込む、ワイドヌル終端文字列の最初の要素へのポインタ
src - 変換するヌル終端ワイド文字列へのポインタ
count - 出力する最大文字数

[edit] Return value

変換されたワイド文字列の長さ(終端のヌル文字を除く)。

[edit] Example

#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

[edit] See also

strcmpstrcoll と同じ結果を生成するように文字列を変換する
(関数) [編集]
[virtual]
照合を比較に置き換えることができるように文字列を変換します。
(std::collate<CharT> の仮想保護メンバ関数) [編集]
現在のロケールに従って2つのワイド文字列を比較する
(関数) [編集]
C documentation for wcsxfrm
English 日本語 中文(简体) 中文(繁體)