本地化库
本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C++ 标准库的其他组件的行为。
平面类别
定义字符分类表
std::ctype
template< class CharT > |
类 ctype 封装字符分类特征。所有通过 std::basic_istream<charT> 进行的流输入操作用感染于流中的 std::ctype<charT> 鉴别空白符以将输入记号化。流输出操作在输出前应用 std::ctype<charT>::widen() 到窄字符参数。
继承图
标准库提供二个孤立(独立于本地环境)的特化:
定义于头文件 | |
std::ctype<char> | 提供最小 "C" 本地环境分类的窄字符等价版本。此特化用表查找字符分类 |
std::ctype<wchar_t> | 提供适合于原生字符集的宽字符分类 |
另外, C++ 程序中构造的每个 locale 对象实现其自身(本地环境限定)的这些版本。
成员类型
成员类型 | 定义 |
char_type | CharT |
调用 do_scan_is & 定位序列中首个符合给定分类的字符
std::ctype<CharT>::scan_is,
std::ctype<CharT>::do_scan_is
public: | (1) | |
protected: | (2) |
1) 公开成员函数,调用最终导出类的受保护虚成员函数 do_scan_is
。
2) 定位字符数组 [beg, end)
中满足分类掩码 m
的首个字符,即首个使得 is(m, c) 会返回 true 的字符 c
。
参数
m | - | 要搜索的掩码 |
beg | - | 指向要搜索的数组中首字符的指针 |
end | - | 指向要搜索的数组尾后一位置的指针 |
返回值
指向 [beg, end)
中首个满足掩码的字符,或若找不到这种字符则为 end
。
调用示例
#include <locale>
#include <clocale>
#include <iostream>
#include <iterator>int main()
{std::setlocale(LC_ALL, "Chinese (Simplified)_China.936");std::wcout.imbue(std::locale("Chinese (Simplified)_China.936"));auto& use_facet1 = std::use_facet<std::ctype<wchar_t>>(std::wcout.getloc());// 跳过首个字母之前wchar_t str1[] = L" \t\t\n Кошка";const wchar_t* p1 = use_facet1.scan_is(std::ctype_base::alpha, std::begin(str1), std::end(str1));std::wcout << "'" << p1 << "'" << std::endl;// 跳过首个字母之前wchar_t str2[] = L"123456789ネプネプ";const wchar_t* p2 = use_facet1.scan_is(std::ctype_base::alpha, std::begin(str2), std::end(str2));std::wcout << "'" << p2 << "'" << std::endl;wchar_t str3[] = L" ABcdEFG";const wchar_t* p3 = use_facet1.scan_is(std::ctype_base::upper, std::begin(str3), std::end(str3));std::wcout << "'" << p3 << "'" << std::endl;wchar_t str4[] = L" ABcdEFG";const wchar_t* p4 = use_facet1.scan_is(std::ctype_base::lower, std::begin(str4), std::end(str4));std::wcout << "'" << p4 << "'" << std::endl;wchar_t str5[] = L" ABcdEFG";const wchar_t* p5 = use_facet1.scan_is(std::ctype_base::blank, std::begin(str5), std::end(str5));std::wcout << "'" << p5 << "'" << std::endl;return 0;
}
输出
'Кошка'
'ネプネプ'
'ABcdEFG'
'cdEFG'
' ABcdEFG'