前言
<cctype> 标准库是对于单个字符的处理库,包括字符分类和字符操控两大类函数,这个头文件属于NTBS (Null-terminated byte strings)的一部分,源自于C语言中的标准库 <ctype.h>。
概述
该库中共有14个函数,其函数签名如下:
字符分类
前12个函数属于字符分类的函数,其作用如下:
isalnum(ch)
:当ch是字母或者数字时返回一个非零值,否则返回0。字母或数字包括26个大写字母、26个小写字母和10个十进制数字。isalpha(ch)
:当ch是字母时返回一个非零值,否则返回0。isblank(ch)
:(C++11) 当ch是空字符时返回一个非零值,否则返回0。空字符包括制表符和空格。iscntrl(ch)
:当ch是控制字符时返回一个非零值,否则返回0。控制字符包括ASCII码为 0x00-0x1F 和 0x7F的字符。isdigit(ch)
:当ch是数字时返回一个非零值,否则返回0。isgraph(ch)
:当ch是一个有图形表示的字符时返回一个非零值,否则返回0。有图形表示的字符包括大小写字母,数字,标点。islower(ch)
:当ch是一个小写字母时返回一个非零值,否则返回0。isprint(ch)
:当ch是一个可打印字符时返回一个非零值,否则返回0。ispunct(ch)
:当ch是一个标点字符时返回一个非零值,否则返回0。isspace(ch)
:当ch是一个空白字符时返回一个非零值,否则返回0。isupper(ch)
:当ch是一个大写字母时返回一个非零值,否则返回0。isxdigit(ch)
:当ch是一个16进制数数字字符时返回一个非零值,否则返回0。包括1234567890abcdefABCDEF。
对于具体的判定可参考下表:
字符操控
后2个函数属于字符操控的函数,其作用如下:
tolower(ch)
:如果ch是大写字母,则返回对应的小写字母;否则原样返回ch。toupper(ch)
:如果ch是小写字母,则返回对应的大写字母;否则原样返回ch。
注意事项
可以看到该库是对单个字符的操作库,但是其中所有函数接收的参数和返回值都是 int 类型。因此,在库函数的实现中,对于参数的值既不能表示为unsigned char
,也不等于EOF
的行为是未定义的。所以为了安全的使用这些函数,实参最好转换为unsigned char
类型。例如:
// 对字符分类函数的使用
bool my_isalnum(char ch)
{
return std::isalnum(static_cast<unsigned char>(ch));
}
// 对字符操控函数的使用
char my_toupper(char ch)
{
return static_cast<char>(std::toupper(static_cast<unsigned char>(ch)));
}
参考资料:cppreference