命名空间
变体
操作

std::collate<CharT>::transform, do_transform

来自 cppreference.com
< cpp‎ | locale‎ | collate
 
 
 
 
在头文件 <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) 将字符序列 [lowhigh) 转换为一个字符串,该字符串与对另一个字符串调用 transform() 的结果进行词法比较(例如,使用字符串的 operator<),产生的结果与对相同两个字符串调用 do_compare() 相同。

内容

[编辑] 参数

low - 指向要转换的序列中的第一个字符的指针
high - 指向要转换的序列的结束后的指针

[编辑] 返回值

被转换的字符串,以便可以对转换后的字符串进行词法比较,而不是对原始字符串进行排序。在 "C" 区域设置中,返回的字符串是 [lowhigh) 的完全副本。在其他区域设置中,返回字符串的内容是实现定义的,大小可能长得多。

[编辑] 注释

除了用于排序之外,转换字符串的特定于实现的格式还由 std::regex_traits<>::transform_primary 识别,它能够提取等价类信息。

[编辑] 示例

#include <iomanip>
#include <iostream>
#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 将产生与 wcscoll 相同的结果
(函数) [编辑]