public member function
<locale>

std::ctype::is

单个字符 (1)
            bool is (mask m, char_type c) const;
序列 (2)
const char_type* is (const char_type* low,                     const char_type* high, mask* vec) const;
分类字符
第一个版本(1) 返回字符 c 是否属于位掩码 m 所指定的任何类别。

第二个版本(2) 对范围 [low,high) 中的字符进行分类,用每个字符的位掩码分类结果顺序填充数组 vec

ctype 的泛型模板中,此函数仅调用虚保护成员 do_is,该成员默认执行上述操作。

char 特化 (ctype<char>) 中,此函数使用内部 table 直接返回结果,而不调用任何虚成员。

参数

m
成员类型 mask 的位掩码(继承自 ctype_base),指定要对照哪个类别检查字符。如果位掩码组合了多个类别,则当字符属于任何一个类别时,函数返回 true
它可以是以下成员位掩码值的任何按位组合
成员常量描述
space未指定(唯一位)空白字符
print未指定(唯一位)可打印字符
cntrl未指定(唯一位)控制字符
upper未指定(唯一位)大写字母
lower未指定(唯一位)小写字母
alpha未指定(唯一位)字母字符
digit未指定(唯一位)十进制数字
punct未指定(唯一位)标点符号字符
xdigit未指定(唯一位)十六进制数字
alnumalpha|digit字母数字字符
graphalnum|punct具有图形表示的字符
成员常量描述
space未指定(唯一位)空白字符
print未指定(唯一位)可打印字符
cntrl未指定(唯一位)控制字符
upper未指定(唯一位)大写字母
lower未指定(唯一位)小写字母
alpha未指定(唯一位)字母字符
digit未指定(唯一位)十进制数字
punct未指定(唯一位)标点符号字符
xdigit未指定(唯一位)十六进制数字
blank未指定(唯一位)空白字符
alnumalpha|digit字母数字字符
graphalnum|punct具有图形表示的字符
有关 ASCII 字符如何根据这些类别进行分类的详细信息,请参阅 <cctype>
c
要分类的字符。
成员类型 char_type 是字面量的字符类型(定义为 ctype 的模板参数 charT 的别名)。
low, high
字符序列的开始和结束指针。使用的范围是 [low,high),它包含 lowhigh 之间的所有字符,包括 low 指向的字符,但不包括 high 指向的字符。
请注意,空字符(如果有)也会被分类,并且函数会继续处理它们之后的内容,直到整个范围处理完毕。
成员类型 char_type 是字面量的字符类型(定义为 ctype 的模板参数 charT 的别名)。
vec
目标数组,其存储空间足以容纳至少 (high-low)mask 类型的元素。
此数组用与每个字符对应的 mask 值组合进行填充。

返回值

第一个版本(1) 如果 c 分类到传递的掩码 m 的任何类别中,则返回 true

第二个版本(2) 返回 high
成员类型 char_type 是字面量的字符类型(定义为 ctype 的模板参数 charT 的别名)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// ctype::is example
#include <iostream>       // std::cout, std::boolalpha
#include <locale>         // std::locale, std::ctype, std::use_facet

int main ()
{
  std::locale loc;
  const char quote[] = "It is wonderful how much may be done if we are always doing.";
                      // (Attributed to Thomas Jefferson)

  std::cout << '"' << quote << "\"\n";

  // single character:
  std::cout << "The quote begins with an uppercase letter? ";
  std::cout << std::boolalpha;
  std::cout << std::use_facet< std::ctype<char> >(loc).is (std::ctype<char>::upper, quote[0]);
  std::cout << '\n';

  // sequence of characters:
  int cx = 0;
  std::ctype<char>::mask * masks = new std::ctype<char>::mask [60];
  std::use_facet< std::ctype<char> >(loc).is (quote, quote+60, masks);
  for (int i=0; i<60; ++i) if (masks[i] & std::ctype<char>::space) ++cx;
  std::cout << "The quote has " << cx << " whitespaces.\n";
  return 0;
}

输出

"It is wonderful how much may be done if we are always doing."
The quote begins with an uppercase letter? true
The quote has 12 whitespaces.


数据竞争

该对象被访问。
(2) 中,会访问范围 [low,high) 中的元素,并修改 vec 指向的数组中的元素。

异常安全

如果抛出异常,facet 对象不会发生任何变化,尽管目标数组中的字符可能会受到影响。

另见