Namespaces
Variants

std:: isalnum

From zh.cppreference.net
定义于头文件 <cctype>
int isalnum ( int ch ) ;

检查给定字符在当前 C 语言区域设置中是否被分类为字母数字字符。在默认区域设置中,以下字符属于字母数字:

  • 数字 ( 0123456789 )
  • 大写字母 ( ABCDEFGHIJKLMNOPQRSTUVWXYZ )
  • 小写字母 ( abcdefghijklmnopqrstuvwxyz )

如果 ch 的值无法表示为 unsigned char 且不等于 EOF , 则行为是未定义的。

目录

参数

ch - 待分类的字符

返回值

若字符为字母数字字符则返回非零值, 0 否则。

注释

与 <cctype> 中的所有其他函数一样,如果参数值既不能表示为 unsigned char 也不等于 EOF ,则 std::isalnum 的行为是未定义的。为了安全地使用这些函数处理普通 char (或 signed char ),应首先将参数转换为 unsigned char :

bool my_isalnum(char ch)
{
    return std::isalnum(static_cast<unsigned char>(ch));
}

同样地,当迭代器的值类型为 char 或 signed char 时,不应直接将其与标准算法一起使用。而应先将值转换为 unsigned char :

int count_alnums(const std::string& s)
{
    return std::count_if(s.begin(), s.end(),
                      // static_cast<int(*)(int)>(std::isalnum)         // 错误
                      // [](int c){ return std::isalnum(c); }           // 错误
                      // [](char c){ return std::isalnum(c); }          // 错误
                         [](unsigned char c){ return std::isalnum(c); } // 正确
                        );
}

示例

演示了在不同区域设置(操作系统特定)下使用 std::isalnum 的情况。

#include <cctype>
#include <clocale>
#include <iostream>
int main()
{
    unsigned char c = '\xdf'; // German letter ß in ISO-8859-1
    std::cout << "isalnum(\'\\xdf\', default C locale) returned "
              << std::boolalpha << static_cast<bool>(std::isalnum(c)) << '\n';
    if (std::setlocale(LC_ALL, "de_DE.iso88591"))
        std::cout << "isalnum(\'\\xdf\', ISO-8859-1 locale) returned "
                  << static_cast<bool>(std::isalnum(c)) << '\n';
}

可能的输出:

isalnum('\xdf', default C locale) returned false
isalnum('\xdf', ISO-8859-1 locale) returned true

另请参阅

检查字符是否被区域设置分类为字母数字
(函数模板)
检查宽字符是否为字母数字
(函数)
C 文档 关于 isalnum
说明: - 保留了所有HTML标签和属性 - 未翻译 标签内的内容 - 未翻译C++相关术语 - 仅将连接符"–"转换为中文习惯的"–"(实际显示效果相同) - 保持了原始格式和结构
ASCII 值 字符

iscntrl
iswcntrl

isprint
iswprint

isspace
iswspace

isblank
iswblank

isgraph
iswgraph

ispunct
iswpunct

isalnum
iswalnum

isalpha
iswalpha

isupper
iswupper

islower
iswlower

isdigit
iswdigit

isxdigit
iswxdigit

十进制 十六进制 八进制
0–8 \x0 – \x8 \0 – \10 控制字符 ( NUL 等) ≠0 0 0 0 0 0 0 0 0 0 0 0
9 \x9 \11 制表符 ( \t ) ≠0 0 ≠0 ≠0 0 0 0 0 0 0 0 0
10–13 \xA – \xD \12 – \15 空白字符 ( \n , \v , \f , \r ) ≠0 0 ≠0 0 0 0 0 0 0 0 0 0
14–31 \xE – \x1F \16 – \37 控制码 ≠0 0 0 0 0 0 0 0 0 0 0 0
32 \x20 \40 空格符 0 ≠0 ≠0 ≠0 0 0 0 0 0 0 0 0
33–47 \x21 – \x2F \41 – \57 !"#$%&'()*+,-./ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
48–57 \x30 – \x39 \60 – \71 0123456789 0 ≠0 0 0 ≠0 0 ≠0 0 0 0 ≠0 ≠0
58–64 \x3A – \x40 \72 – \100 :;<=>?@ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
65–70 \x41 – \x46 \101 – \106 ABCDEF 0 ≠0 0 0 ≠0 0 ≠0 ≠0 ≠0 0 0 ≠0
71–90 \x47 – \x5A \107 – \132 GHIJKLMNOP
QRSTUVWXYZ
0 ≠0 0 0 ≠0 0 ≠0 ≠0 ≠0 0 0 0
91–96 \x5B – \x60 \133 – \140 [\]^_` 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
97–102 \x61 – \x66 \141 – \146 abcdef 0 ≠0 0 0 ≠0 0 ≠0 ≠0 0 ≠0 0 ≠0
103–122 \x67 – \x7A \147 – \172 ghijklmnop
qrstuvwxyz
0 ≠0 0 0 ≠0 0 ≠0 ≠0 0 ≠0 0 0
123–126 \x7B – \x7E \172 – \176 {|}~ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
127 \x7F \177 退格字符 ( DEL ) ≠0 0 0 0 0 0 0 0 0 0 0 0