std:: ctype
From cppreference.net
|
定义于头文件
<locale>
|
||
|
template
<
class
CharT
>
class ctype ; |
||
类
ctype
封装了字符分类功能。所有通过
std::
basic_istream
<
CharT
>
执行的流输入操作都使用流所植入区域设置的
std::ctype<CharT>
来识别空白字符以实现输入分词。流输出操作会在输出前对窄字符参数应用
std::ctype<CharT>::widen()
方法。
继承关系图
目录 |
特化
标准库保证提供以下特化(它们 是任何locale对象都必须实现的 ):
|
定义于头文件
<locale>
|
|
std::ctype<char>
|
提供最小“C”本地环境分类的窄字符等价版本。此特化使用查表法进行字符分类 |
| std :: ctype < wchar_t > | 提供适用于本地字符集的宽字符分类 |
嵌套类型
| 类型 | 定义 |
char_type
|
CharT
|
数据成员
| 成员 | 描述 |
std::locale::id
id
[静态]
|
facet 的标识符 |
成员函数
构造新的
ctype
facet
(公开成员函数) |
|
析构
ctype
facet
(受保护成员函数) |
|
调用
do_is
(公开成员函数) |
|
调用
do_scan_is
(公开成员函数) |
|
调用
do_scan_not
(公开成员函数) |
|
调用
do_toupper
(公开成员函数) |
|
调用
do_tolower
(公开成员函数) |
|
调用
do_widen
(公开成员函数) |
|
调用
do_narrow
(公开成员函数) |
受保护成员函数
|
[virtual]
|
对字符或字符序列进行分类
(虚函数保护成员函数) |
|
[virtual]
|
定位序列中符合给定分类的首个字符
(虚函数保护成员函数) |
|
[virtual]
|
定位序列中不符合给定分类的首个字符
(虚函数保护成员函数) |
|
[virtual]
|
将字符或字符序列转换为大写
(虚函数保护成员函数) |
|
[virtual]
|
将字符或字符序列转换为小写
(虚函数保护成员函数) |
|
[virtual]
|
将字符或字符序列从
char
转换为
CharT
(虚函数保护成员函数) |
|
[virtual]
|
将字符或字符序列从
CharT
转换为
char
(虚函数保护成员函数) |
继承自 std:: ctype_base
嵌套类型
| 类型 | 定义 |
mask
|
未指定的 BitmaskType 类型(枚举、整数类型或位集) |
成员常量
|
space
[static]
|
标识空白字符分类的
mask
值
(公开静态成员常量) |
|
print
[static]
|
标识可打印字符分类的
mask
值
(公开静态成员常量) |
|
cntrl
[static]
|
标识控制字符分类的
mask
值
(公开静态成员常量) |
|
upper
[static]
|
标识大写字符分类的
mask
值
(公开静态成员常量) |
|
lower
[static]
|
标识小写字符分类的
mask
值
(公开静态成员常量) |
|
alpha
[static]
|
标识字母字符分类的
mask
值
(公开静态成员常量) |
|
digit
[static]
|
标识数字字符分类的
mask
值
(公开静态成员常量) |
|
punct
[static]
|
标识标点字符分类的
mask
值
(公开静态成员常量) |
|
xdigit
[static]
|
标识十六进制数字字符分类的
mask
值
(公开静态成员常量) |
|
blank
[static]
(C++11)
|
标识空白字符分类的
mask
值
(公开静态成员常量) |
|
alnum
[static]
|
alpha
|
digit
(公开静态成员常量) |
|
graph
[static]
|
alnum
|
punct
(公开静态成员常量) |
示例
以下示例演示如何修改除
ctype<char>
之外的
ctype
来对 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; // 空格将不被归类为空白符 if ((m & space) && c == L',') return true; // 逗号将被归类为空白符 return ctype::do_is(m, c); // 其余情况交由基类处理 } }; 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
参见
|
std::ctype
针对
char
类型的特化
(类模板特化) |
|
|
定义字符分类类别
(类) |
|
|
表示系统提供的命名区域设置的
std::ctype
(类模板) |