std::wcsxfrm
From cppreference.com
| ヘッダ <cwchar> で定義 |
||
| std::size_t wcsxfrm( wchar_t* dest, const wchar_t* src, std::size_t count ); |
||
src で指されるヌル終端ワイド文字列を、実装定義の形式に変換します。これにより、変換された2つの文字列を std::wcscmp で比較した結果が、元の文字列を std::wcscoll で比較した結果と同じになるようにします。これは現在の C ロケールで行われます。
変換された文字列の最初の count 文字が宛先に書き込まれ、終端のヌル文字も含まれます。完全な変換された文字列の長さ(終端のヌル文字を除く)が返されます。
count が 0 の場合、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
strcmp が strcoll と同じ結果を生成するように文字列を変換する(関数) | |
| [virtual] |
照合を比較に置き換えることができるように文字列を変換します。 ( std::collate<CharT> の仮想保護メンバ関数) |
| 現在のロケールに従って2つのワイド文字列を比較する (関数) | |
| C documentation for wcsxfrm
| |