std::ctype
来自 cppreference.cn
定义于头文件 <locale> |
||
template< class CharT > class ctype; |
||
类 ctype
封装了字符分类特性。所有通过 std::basic_istream<CharT> 执行的流输入操作,都使用流中浸润的 locale 的 std::ctype<CharT>
来识别空白字符以进行输入分词。流输出操作在输出前将 std::ctype<CharT>::widen()
应用于窄字符参数。
继承图
目录 |
[编辑] 特化
标准库保证提供以下特化(它们 要求由任何区域设置对象实现)
定义于头文件
<locale> | |
std::ctype<char>
|
提供最小的“C”区域设置分类的窄字符等价物。此特化使用表格查找进行字符分类。 |
std::ctype<wchar_t> | 提供适合本地字符集的宽字符分类。 |
[编辑] 嵌套类型
类型 | 定义 |
char_type
|
CharT
|
[编辑] 数据成员
成员 | 描述 |
std::locale::id id [static] |
facet 的标识符 |
[编辑] 成员函数
构造一个新的 ctype 构面(公开成员函数) | |
析构一个 ctype 构面(受保护成员函数) | |
调用 do_is (public 成员函数) | |
调用 do_scan_is (public 成员函数) | |
调用 do_scan_not (public 成员函数) | |
调用 do_toupper (public 成员函数) | |
调用 do_tolower (public 成员函数) | |
调用 do_widen (public 成员函数) | |
调用 do_narrow (public 成员函数) |
[编辑] 受保护的成员函数
[虚函数] |
分类一个字符或一个字符序列 (虚保护成员函数) |
[虚函数] |
在一个序列中定位第一个符合给定分类的字符 (虚保护成员函数) |
[虚函数] |
在一个序列中定位第一个不符合给定分类的字符 (虚保护成员函数) |
[虚函数] |
将一个或多个字符转换为大写 (虚保护成员函数) |
[虚函数] |
将一个或多个字符转换为小写 (虚保护成员函数) |
[虚函数] |
将一个或多个字符从 char 转换为 CharT (虚保护成员函数) |
[虚函数] |
将一个或多个字符从 CharT 转换为 char(虚保护成员函数) |
继承自 std::ctype_base
嵌套类型
类型 | 定义 |
mask
|
未指定的 BitmaskType 类型(枚举、整数类型或位集) |
成员常量
space [静态] |
标识空白字符分类的 mask 值(public static 成员常量) |
print [静态] |
标识可打印字符分类的 mask 值(public static 成员常量) |
cntrl [静态] |
标识控制字符分类的 mask 值(public static 成员常量) |
upper [静态] |
标识大写字符分类的 mask 值(public static 成员常量) |
lower [静态] |
标识小写字符分类的 mask 值(public static 成员常量) |
alpha [静态] |
标识字母字符分类的 mask 值(public static 成员常量) |
digit [静态] |
标识数字字符分类的 mask 值(public static 成员常量) |
punct [静态] |
标识标点字符分类的 mask 值(public static 成员常量) |
xdigit [静态] |
标识十六进制数字字符分类的 mask 值(public static 成员常量) |
blank [静态] (C++11) |
标识空白字符分类的 mask 值(public static 成员常量) |
alnum [静态] |
alpha | digit (public static 成员常量) |
graph [静态] |
alnum | punct (public static 成员常量) |
[编辑] 示例
以下示例演示了修改 ctype
(而非 ctype<char>
) 以对 CSV 文件进行分词。
运行此代码
#include <iostream> #include <locale> #include <sstream> struct csv_whitespace : std::ctype<wchar_t> { bool do_is(mask m, char_type c) const { if ((m & space) && c == L' ') return false; // space will NOT be classified as whitespace if ((m & space) && c == L',') return true; // comma will be classified as whitespace return ctype::do_is(m, c); // leave the rest to the base class } }; int main() { std::wstring in = L"Column 1,Column 2,Column 3\n123,456,789"; std::wstring token; std::wcout << "default locale:\n"; std::wistringstream s1(in); while (s1 >> token) std::wcout << " " << token << '\n'; std::wcout << "locale with modified ctype:\n"; std::wistringstream s2(in); csv_whitespace* my_ws = new csv_whitespace; s2.imbue(std::locale(s2.getloc(), my_ws)); while (s2 >> token) std::wcout << " " << token << '\n'; }
输出
default locale: Column 1,Column 2,Column 3 123,456,789 locale with modified ctype: Column 1 Column 2 Column 3 123 456 789
[编辑] 参阅
类型 char 的 std::ctype 特化 (类模板特化) | |
定义字符分类类别 (类) | |
表示具名 locale 的系统提供的 std::ctype (类模板) |