命名空间
变体
操作

std::ctype<char>

来自 cppreference.cn
< cpp‎ | locale
 
 
 
 
定义于头文件 <locale>
template<>
class ctype<char>;

这个 std::ctype 的特化为 char 类型封装了字符分类特性。与使用虚函数的一般用途的 std::ctype 不同,此特化使用表格查找来分类字符(通常更快)。

基类 std::ctype<char> 实现了与最小“C”区域设置等效的字符分类。如果使用非默认分类表参数构造,或者构造为 std::ctype_byname<char> 或用户定义的派生 facet,则分类规则可以扩展或修改。所有 std::istream 格式化输入函数都必须在输入解析期间使用 std::ctype<char> 进行字符分类。

cpp/locale/ctype basecpp/locale/locale/facetstd-ctype char-inheritance.svg

继承图

目录

[编辑] 嵌套类型

类型 定义
char_type char

[编辑] 数据成员

成员 描述
std::locale::id id [static] facet 的标识符
const std::size_t table_size [static] 分类表的大小,至少 256

[编辑] 成员函数

构造一个新的 ctype<char> facet
(public member function) [编辑]
销毁一个 ctype<char> facet
(protected member function) [编辑]
获取字符分类表
(public member function) [编辑]
获取“C”区域设置字符分类表
(public static member function) [编辑]
使用分类表对字符或字符序列进行分类
(public member function) [编辑]
使用分类表在序列中定位第一个符合给定分类的字符
(public member function) [编辑]
使用分类表在序列中定位第一个不符合给定分类的字符
(public member function) [编辑]
调用 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
[静态]
标识空白字符分类的 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<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
(类模板) [编辑]