本地化库
本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 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_tolower & 转换一个或多个字符为小写
std::ctype<CharT>::tolower,
std::ctype<CharT>::do_tolower
public: | (1) | |
public: | (2) | |
protected: | (3) | |
protected: | (4) |
1,2) 公开成员函数,调用最终导出类上的受保护虚成员函数 do_tolower
。
3) 若此 locale 定义 c
的小写形式,则转换它为小写形式。
4) 对字符数组 [beg, end)
中每个存在小写形式的字符,以其小写形式替换该字符。
参数
c | - | 要转换的字符 |
beg | - | 指向要转换的数组中首字符的指针 |
end | - | 指向要转换的数组尾后一位置的指针 |
返回值
1,3) 小写字符,或若无列于此 loacale 的小写形式则为 c
。
2,4) end
。
注意
此函数只能进行 1:1 字符映射,例如希腊文大写字母 'Σ' 拥有二个小写形式,取决于在词中的位置: 'σ' 与 'ς' 。此情况下对 do_tolower
的调用不能获得正确的小写形式。
调用示例
#include <locale>
#include <iostream>
void try_lower(const std::ctype<wchar_t>& f, wchar_t c)
{
wchar_t up = f.tolower(c);
if (up != c)
{
std::wcout << "Lower case form of \'" << c << "' is " << up << std::endl;
}
else
{
std::wcout << '\'' << c << "' has no lower case form" << std::endl;
}
}
int main()
{
std::locale::global(std::locale("Chinese (Simplified)_China.936"));
std::wcout.imbue(std::locale());
std::wcout << "Chinese (Simplified)_China.936 locale:" << std::endl;
auto& f = std::use_facet<std::ctype<wchar_t>>(std::locale());
try_lower(f, L'A');
try_lower(f, L'Q');
try_lower(f, L'W');
std::wstring str = L"HELLo, wORLD!";
std::wcout << "Lowercase form of the string '" << str << "' is ";
f.tolower(&str[0], &str[0] + str.size());
std::wcout << "'" << str << "'" << std::endl;
return 0;
}
输出
Chinese (Simplified)_China.936 locale:
Lower case form of 'A' is a
Lower case form of 'Q' is q
Lower case form of 'W' is w
Lowercase form of the string 'HELLo, wORLD!' is 'hello, world!'