std:: ctype <char>
|
定义于头文件
<locale>
|
||
|
template
<>
class ctype < char > ; |
||
这是对 std::ctype 的特化版本,封装了针对 char 类型的字符分类功能。与使用虚函数的通用 std::ctype 不同,该特化版本通过查表方式实现字符分类(通常速度更快)。
基类
std::ctype
<
char
>
实现的字符分类等效于最小化的 "C" 区域设置。若通过非默认分类表参数构造、构造为
std::
ctype_byname
<
char
>
或作为用户自定义派生facet时,其分类规则可被扩展或修改。所有
std::istream
格式化输入函数在输入解析过程中均需使用
std::ctype
<
char
>
进行字符分类。
继承关系图
目录 |
嵌套类型
| 类型 | 定义 |
char_type
|
char |
数据成员
| 成员 | td> 描述|
std::locale::id
id
[静态]
|
facet 的标识符 |
const
std::
size_t
table_size
[静态]
|
分类表的大小,至少为 256 |
成员函数
|
构造新的
ctype
<
char
>
facet
(公开成员函数) |
|
|
析构
ctype
<
char
>
facet
(受保护成员函数) |
|
|
获取字符分类表
(公开成员函数) |
|
|
[static]
|
获取 "C" 区域设置的字符分类表
(公开静态成员函数) |
|
使用分类表对字符或字符序列进行分类
(公开成员函数) |
|
|
使用分类表定位序列中符合给定分类的首个字符
(公开成员函数) |
|
|
使用分类表定位序列中不符合给定分类的首个字符
(公开成员函数) |
|
调用
do_toupper
(
std::ctype<CharT>
的公开成员函数)
|
|
调用
do_tolower
(
std::ctype<CharT>
的公开成员函数)
|
|
调用
do_widen
(
std::ctype<CharT>
的公开成员函数)
|
|
调用
do_narrow
(
std::ctype<CharT>
的公开成员函数)
|
受保护成员函数
|
[virtual]
|
将字符或字符序列转换为大写
(
std::ctype<CharT>
的虚受保护成员函数)
|
|
[virtual]
|
将字符或字符序列转换为小写
(
std::ctype<CharT>
的虚受保护成员函数)
|
|
[virtual]
|
将字符或字符序列从
char
转换为
CharT
(
std::ctype<CharT>
的虚受保护成员函数)
|
|
[virtual]
|
将字符或字符序列从
CharT
转换为
char
(
std::ctype<CharT>
的虚受保护成员函数)
|
继承自 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 > 来对逗号分隔值进行分词:
#include <cstddef> #include <iostream> #include <locale> #include <sstream> #include <vector> // This ctype facet classifies commas and endlines as whitespace struct csv_whitespace : std::ctype<char> { static const mask* make_table() { // make a copy of the "C" locale table static std::vector<mask> v(classic_table(), classic_table() + table_size); v[','] |= space; // comma will be classified as whitespace v[' '] &= ~space; // space will not be classified as whitespace return &v[0]; } csv_whitespace(std::size_t refs = 0) : ctype(make_table(), false, refs) {} }; int main() { std::string in = "Column 1,Column 2,Column 3\n123,456,789"; std::string token; std::cout << "Default locale:\n"; std::istringstream s1(in); while (s1 >> token) std::cout << " " << token << '\n'; std::cout << "Locale with modified ctype:\n"; std::istringstream s2(in); s2.imbue(std::locale(s2.getloc(), new csv_whitespace)); while (s2 >> token) std::cout << " " << 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
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 695 | C++98 |
table()
和
classic_table()
是受保护成员函数
|
将其改为公开函数 |
参见
|
定义字符分类表
(类模板) |
|
|
定义字符分类类别
(类) |
|
|
表示系统提供的命名区域设置的
std::ctype
(类模板) |