std::ctype
来自 cppreference.com
定义在头文件 <locale> 中 |
||
template< class CharT > class ctype; |
||
类 ctype
封装了字符分类功能。所有通过 std::basic_istream<CharT> 执行的流输入操作都使用注入到流中的区域设置的 std::ctype<CharT>
来识别用于输入标记化的空白字符。流输出操作在输出之前将窄字符参数应用于 std::ctype<CharT>::widen()
。
继承图
内容 |
[编辑] 专门化
标准库保证提供以下专门化(它们需要由任何区域设置对象实现)
定义在头文件
<locale> 中 | |
std::ctype<char>
|
提供最小“C”区域设置分类的窄字符等效项。此专门化使用表格查找进行字符分类 |
std::ctype<wchar_t> | 提供适合本地字符集的宽字符分类 |
[编辑] 成员类型
成员类型 | 定义 |
char_type
|
CharT
|
[编辑] 成员函数
构造一个新的 ctype 方面(公共成员函数) | |
析构一个 ctype 方面(受保护的成员函数) | |
调用 do_is (公共成员函数) | |
调用 do_scan_is (公共成员函数) | |
调用 do_scan_not (公共成员函数) | |
调用 do_toupper (公共成员函数) | |
调用 do_tolower (公共成员函数) | |
调用 do_widen (公共成员函数) | |
调用 do_narrow (公共成员函数) |
[编辑] 成员对象
static std::locale::id id |
区域设置的 id (公共成员对象) |
[编辑] 受保护的成员函数
[虚拟] |
对一个字符或一个字符序列进行分类 (虚拟受保护的成员函数) |
[虚拟] |
在序列中找到第一个符合给定分类的字符 (虚拟受保护的成员函数) |
[虚拟] |
在序列中找到第一个不符合给定分类的字符 (虚拟受保护的成员函数) |
[虚拟] |
将一个字符或字符转换为大写 (虚拟受保护的成员函数) |
[虚拟] |
将一个字符或字符转换为小写 (虚拟受保护的成员函数) |
[虚拟] |
将一个字符或字符从 char 转换为 CharT (虚拟受保护的成员函数) |
[虚拟] |
将一个字符或字符从 CharT 转换为 char(虚拟受保护的成员函数) |
从 std::ctype_base 继承
成员类型
类型 | 定义 |
mask
|
未指定的位掩码类型(枚举、整数类型或位集) |
成员常量
space [静态] |
mask 的值,标识空白字符分类(公共静态成员常量) |
print [静态] |
mask 的值,标识可打印字符分类(公共静态成员常量) |
cntrl [静态] |
mask 的值,标识控制字符分类(公共静态成员常量) |
upper [静态] |
mask 的值,标识大写字符分类(公共静态成员常量) |
lower [静态] |
mask 的值,标识小写字符分类(公共静态成员常量) |
alpha [静态] |
mask 的值,标识字母字符分类(公共静态成员常量) |
digit [静态] |
mask 的值,标识数字字符分类(公共静态成员常量) |
punct [静态] |
mask 的值,标识标点字符分类(公共静态成员常量) |
xdigit [静态] |
mask 的值,标识十六进制数字字符分类(公共静态成员常量) |
blank [静态] (C++11) |
mask 的值,标识空格字符分类(公共静态成员常量) |
alnum [静态] |
alpha | digit (公共静态成员常量) |
graph [静态] |
alnum | punct (公共静态成员常量) |
[编辑] 示例
以下示例演示了对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 特化 (类模板特化) | |
定义字符分类类别 (类) | |
表示为命名区域提供的std::ctype (类模板) |