std::collate<CharT>::transform, do_transform
定义于头文件 <locale>
|
||
public: string_type transform( const CharT* low, const CharT* high ) const; |
(1) | |
protected: virtual string_type do_transform( const CharT* low, const CharT* high ) const; |
(2) | |
1) 公开成员函数,调用最终导出类的受保护虚成员函数
do_transform
。2) 转换字符序列
[low, high)
为 string ,使得它与在另一字符串上调用 transform()
的结果以字典序比较,会产生在二个相同字符串上调用 do_compare() 的相同结果。参数
low | - | 指向要变换的字符序列中首字符的指针 |
high | - | 要变换的序列的尾后一位置指针 |
返回值
变换后的字符串,它使得被变换字符串的字典序比较能用于取代原字符串的对照。 "C" 本地环境中,返回的字符串为 [low, high)
的准确副本。其他本地环境中,返回字符串的内容是实现定义的,而且可考虑到大小可能更长。
注意
在对照中的使用外,被变换字符串的本地环境限定格式还为 std::regex_traits::transform_primary 所知,它能释出等价类信息。
示例
运行此代码
#include <iostream> #include <iomanip> #include <locale> int main() { std::locale::global(std::locale("sv_SE.utf8")); auto& f = std::use_facet<std::collate<wchar_t>>(std::locale()); std::wstring in1 = L"\u00e4ngel"; std::wstring in2 = L"\u00e5r"; std::wstring out1 = f.transform(&in1[0], &in1[0] + in1.size()); std::wstring out2 = f.transform(&in2[0], &in2[0] + in2.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 lexicographic 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 lexicographic comparison: ängel before år
参阅
变换字符串,使得 strcmp 会返回与 strcoll 相同的结果 (函数) | |
变换宽字符串,使得 wcscmp 会产生与 wsccoll 相同的结果 (函数) |