一、cctype头文件

<cctype> 是 C++ 标准库中的头文件,提供了一组用于字符处理的函数和宏定义。这些函数主要用于判断和转换字符,以及执行字符分类的操作。

函数列表

字符分类函数

  • isalnum(int c): 判断字符 c 是否是字母或数字。
  • isalpha(int c): 判断字符 c 是否是字母。
  • isdigit(int c): 判断字符 c 是否是数字。
  • islower(int c): 判断字符 c 是否是小写字母。
  • isupper(int c): 判断字符 c 是否是大写字母。
  • isspace(int c): 判断字符 c 是否为空白字符(空格、换行、制表符等)。
  • iscntrl(int c): 判断字符 c 是否是控制字符。
  • ispunct(int c): 判断字符 c 是否是标点符号。
  • isxdigit(int c): 判断字符 c 是否是十六进制数字字符。

字符转换函数

  • tolower(int c): 将大写字母 c 转换为相应的小写字母,其他字符保持不变。
  • toupper(int c): 将小写字母 c 转换为相应的大写字母,其他字符保持不变。

其他函数

  • tolower(int c) 和 toupper(int c) 还可以用作宏,接受字符而不是整数。

注意事项

  • 这些函数的参数通常是字符的 ASCII 值,或者字符本身(以 int 表示)。
  • 如果传入的参数不是字符(即 int 类型),函数会在执行前先将其转换为 unsigned char 类型。
  • 这些函数和宏都定义在全局命名空间中。

示例用法

#include <iostream>
#include <cctype>

int main() {
    char c = 'A';
    
    if (isupper(c)) {
        std::cout << c << " is an uppercase letter." << std::endl;
        std::cout << "Converting to lowercase: " << static_cast<char>(tolower(c)) << std::endl;
    } else {
        std::cout << c << " is not an uppercase letter." << std::endl;
    }
    
    c = '5';
    if (isdigit(c)) {
        std::cout << c << " is a digit." << std::endl;
    } else {
        std::cout << c << " is not a digit." << std::endl;
    }
    
    return 0;
}

解释

  • 第一个条件:检查字符 c 是否是大写字母(通过 isupper(c) 函数)。如果是,打印相应的信息,并将其转换为小写字母打印出来。
  • 第二个条件:检查字符 c 是否是数字字符(通过 isdigit(c) 函数)。

二、函数用法及示例

1.isalnum(int c)

isalnum(int c) 函数用于判断字符 c 是否是字母或数字。

函数签名

#include <cctype>

int isalnum(int c);

参数

  • c:要检查的字符,以 int 类型表示。通常传入字符的 ASCII 值或字符字面量。

返回值

  • 如果 c 是字母(小写或大写)或数字('0' 到 '9'),函数返回一个非零值(通常是1)。
  • 如果 c 不是字母或数字,即是标点符号、空白字符或其他特殊字符,则返回0。

示例

#include <iostream>
#include <cctype>

int main() {
    char c = 'A';
    
    if (isalnum(c)) {
        std::cout << c << " is alphanumeric." << std::endl;
    } else {
        std::cout << c << " is not alphanumeric." << std::endl;
    }
    
    c = '5';
    if (isalnum(c)) {
        std::cout << c << " is alphanumeric." << std::endl;
    } else {
        std::cout << c << " is not alphanumeric." << std::endl;
    }
    
    c = '@';
    if (isalnum(c)) {
        std::cout << c << " is alphanumeric." << std::endl;
    } else {
        std::cout << c << " is not alphanumeric." << std::endl;
    }
    
    return 0;
}

解释

条件判断
  • 首先,定义字符 c 为 'A'isalnum(c) 将检查 c 是否是字母或数字。由于 'A' 是一个字母,所以输出显示 'A' 是字母数字字符。
  • 然后,将字符 c 设置为 '5'isalnum(c) 将再次检查 c 是否是字母或数字。因为 '5' 是一个数字,所以输出显示 '5' 是字母数字字符。
  • 最后,将字符 c 设置为 '@'isalnum(c) 将检查 c 是否是字母或数字。由于 '@' 不是字母或数字,所以输出显示 '@' 不是字母数字字符。

注意事项

  • isalnum 函数返回非零值表示字符是字母或数字,返回0表示字符不是字母或数字。
  • 参数 c 可以是字符的 ASCII 值,也可以是字符字面量。
  • 该函数对于检查用户输入的有效性或者在文本处理中区分不同类型的字符很有用。

2.isalpha(int c)

isalpha(int c) 函数用于判断字符 c 是否是一个字母(包括小写字母和大写字母)。

函数签名

#include <cctype>

int isalpha(int c);

参数

  • c:要检查的字符,以 int 类型表示。通常传入字符的 ASCII 值或字符字面量。

返回值

  • 如果 c 是一个字母(无论是小写字母还是大写字母),函数返回一个非零值(通常是1)。
  • 如果 c 不是字母(即不是小写字母也不是大写字母),则返回0。

示例

#include <iostream>
#include <cctype>

int main() {
    char c = 'A';
    
    if (isalpha(c)) {
        std::cout << c << " is an alphabetic character." << std::endl;
    } else {
        std::cout << c << " is not an alphabetic character." << std::endl;
    }
    
    c = '5';
    if (isalpha(c)) {
        std::cout << c << " is an alphabetic character." << std::endl;
    } else {
        std::cout << c << " is not an alphabetic character." << std::endl;
    }
    
    c = '@';
    if (isalpha(c)) {
        std::cout << c << " is an alphabetic character." << std::endl;
    } else {
        std::cout << c << " is not an alphabetic character." << std::endl;
    }
    
    return 0;
}

解释

条件判断
  • 首先,定义字符 c 为 'A'isalpha(c) 将检查 c 是否是字母。因为 'A' 是一个字母,所以输出显示 'A' 是一个字母。
  • 然后,将字符 c 设置为 '5'isalpha(c) 将再次检查 c 是否是字母。因为 '5' 不是字母,所以输出显示 '5' 不是一个字母。
  • 最后,将字符 c 设置为 '@'isalpha(c) 将检查 c 是否是字母。因为 '@' 不是字母,所以输出显示 '@' 不是一个字母。

注意事项

  • isalpha 函数返回非零值表示字符是一个字母,返回0表示字符不是一个字母。
  • 参数 c 可以是字符的 ASCII 值,也可以是字符字面量。
  • 该函数通常用于在文本处理中判断字符的类型,例如在分词或者语法分析时区分字母和其他字符。

isalpha和isalnum不要搞混了,一个有数字一个不带数字

3.isdigit(int c)

isdigit(int c) 函数用于判断字符 c 是否是一个数字字符。

函数签名

#include <cctype>

int isdigit(int c);

参数

  • c:要检查的字符,以 int 类型表示。通常传入字符的 ASCII 值或字符字面量。

返回值

  • 如果 c 是一个数字字符(即 '0' 到 '9'),函数返回一个非零值(通常是1)。
  • 如果 c 不是数字字符,则返回0。

示例

#include <iostream>
#include <cctype>

int main() {
    char c = '5';
    
    if (isdigit(c)) {
        std::cout << c << " is a digit." << std::endl;
    } else {
        std::cout << c << " is not a digit." << std::endl;
    }
    
    c = 'A';
    if (isdigit(c)) {
        std::cout << c << " is a digit." << std::endl;
    } else {
        std::cout << c << " is not a digit." << std::endl;
    }
    
    c = '@';
    if (isdigit(c)) {
        std::cout << c << " is a digit." << std::endl;
    } else {
        std::cout << c << " is not a digit." << std::endl;
    }
    
    return 0;
}

解释

条件判断
  • 首先,定义字符 c 为 '5'isdigit(c) 将检查 c 是否是数字字符。因为 '5' 是一个数字字符,所以输出显示 '5' 是一个数字字符。
  • 然后,将字符 c 设置为 'A'isdigit(c) 将再次检查 c 是否是数字字符。因为 'A' 不是数字字符,所以输出显示 'A' 不是一个数字字符。
  • 最后,将字符 c 设置为 '@'isdigit(c) 将检查 c 是否是数字字符。因为 '@' 不是数字字符,所以输出显示 '@' 不是一个数字字符。

注意事项

  • isdigit 函数返回非零值表示字符是一个数字字符,返回0表示字符不是一个数字字符。
  • 参数 c 可以是字符的 ASCII 值,也可以是字符字面量。
  • 该函数通常用于在文本处理中判断字符是否是数字,例如在验证用户输入的数字时非常有用。

4.islower(int c)

islower(int c) 函数用于判断字符 c 是否为小写字母。

函数签名

#include <cctype>

int islower(int c);

参数

  • c:要检查的字符,以 int 类型表示。通常传入字符的 ASCII 值或字符字面量。

返回值

  • 如果 c 是一个小写字母(即 'a' 到 'z'),函数返回一个非零值(通常是1)。
  • 如果 c 不是小写字母,则返回0。

示例

#include <iostream>
#include <cctype>

int main() {
    char c = 'a';
    
    if (islower(c)) {
        std::cout << c << " is a lowercase letter." << std::endl;
    } else {
        std::cout << c << " is not a lowercase letter." << std::endl;
    }
    
    c = 'A';
    if (islower(c)) {
        std::cout << c << " is a lowercase letter." << std::endl;
    } else {
        std::cout << c << " is not a lowercase letter." << std::endl;
    }
    
    c = '5';
    if (islower(c)) {
        std::cout << c << " is a lowercase letter." << std::endl;
    } else {
        std::cout << c << " is not a lowercase letter." << std::endl;
    }
    
    return 0;
}

解释

条件判断

  • 首先,定义字符 c 为 'a'islower(c) 将检查 c 是否是小写字母。因为 'a' 是一个小写字母,所以输出显示 'a' 是一个小写字母。
  • 然后,将字符 c 设置为 'A'islower(c) 将再次检查 c 是否是小写字母。因为 'A' 不是小写字母,所以输出显示 'A' 不是一个小写字母。
  • 最后,将字符 c 设置为 '5'islower(c) 将检查 c 是否是小写字母。因为 '5' 不是小写字母,所以输出显示 '5' 不是一个小写字母。

注意事项

  • islower 函数返回非零值表示字符是一个小写字母,返回0表示字符不是一个小写字母。
  • 参数 c 可以是字符的 ASCII 值,也可以是字符字面量。
  • 该函数通常用于在文本处理中检查字符是否是小写字母,例如在进行大小写转换或者语法分析时会使用。

5.isupper(int c)

isupper(int c) 函数用于判断字符 c 是否为大写字母。

函数签名

#include <cctype>

int isupper(int c);

参数

  • c:要检查的字符,以 int 类型表示。通常传入字符的 ASCII 值或字符字面量。

返回值

  • 如果 c 是一个大写字母(即 'A' 到 'Z'),函数返回一个非零值(通常是1)。
  • 如果 c 不是大写字母,则返回0。

示例

#include <iostream>
#include <cctype>

int main() {
    char c = 'A';
    
    if (isupper(c)) {
        std::cout << c << " is an uppercase letter." << std::endl;
    } else {
        std::cout << c << " is not an uppercase letter." << std::endl;
    }
    
    c = 'a';
    if (isupper(c)) {
        std::cout << c << " is an uppercase letter." << std::endl;
    } else {
        std::cout << c << " is not an uppercase letter." << std::endl;
    }
    
    c = '5';
    if (isupper(c)) {
        std::cout << c << " is an uppercase letter." << std::endl;
    } else {
        std::cout << c << " is not an uppercase letter." << std::endl;
    }
    
    return 0;
}

解释

条件判断
  • 首先,定义字符 c 为 'A'isupper(c) 将检查 c 是否是大写字母。因为 'A' 是一个大写字母,所以输出显示 'A' 是一个大写字母。
  • 然后,将字符 c 设置为 'a'isupper(c) 将再次检查 c 是否是大写字母。因为 'a' 不是大写字母,所以输出显示 'a' 不是一个大写字母。
  • 最后,将字符 c 设置为 '5'isupper(c) 将检查 c 是否是大写字母。因为 '5' 不是大写字母,所以输出显示 '5' 不是一个大写字母。

注意事项

  • isupper 函数返回非零值表示字符是一个大写字母,返回0表示字符不是一个大写字母。
  • 参数 c 可以是字符的 ASCII 值,也可以是字符字面量。
  • 该函数通常用于在文本处理中检查字符是否是大写字母,例如在进行大小写转换或者语法分析时会使用。

6.isspace(int c)

isspace(int c) 函数用于判断字符 c 是否为空白字符。

函数签名

#include <cctype>

int isspace(int c);

参数

  • c:要检查的字符,以 int 类型表示。通常传入字符的 ASCII 值或字符字面量。

返回值

  • 如果 c 是一个空白字符,函数返回一个非零值(通常是1)。
  • 如果 c 不是空白字符,则返回0。

空白字符定义

空白字符包括:

  • 空格 ' ' (ASCII值为 32)
  • 换行符 '\n' (ASCII值为 10)
  • 回车符 '\r' (ASCII值为 13)
  • 水平制表符 '\t' (ASCII值为 9)
  • 垂直制表符 '\v' (ASCII值为 11)
  • 换页符 '\f' (ASCII值为 12)

这些字符通常用于格式化文本或者在输入处理中进行空白字符的分隔和识别。

示例

#include <iostream>
#include <cctype>

int main() {
    char c = ' ';
    
    if (isspace(c)) {
        std::cout << "Character '" << c << "' is a whitespace character." << std::endl;
    } else {
        std::cout << "Character '" << c << "' is not a whitespace character." << std::endl;
    }
    
    c = '\t';
    if (isspace(c)) {
        std::cout << "Character '" << c << "' is a whitespace character." << std::endl;
    } else {
        std::cout << "Character '" << c << "' is not a whitespace character." << std::endl;
    }
    
    c = 'A';
    if (isspace(c)) {
        std::cout << "Character '" << c << "' is a whitespace character." << std::endl;
    } else {
        std::cout << "Character '" << c << "' is not a whitespace character." << std::endl;
    }
    
    return 0;
}

解释

条件判断
  • 首先,定义字符 c 为 ' 'isspace(c) 将检查 c 是否是空白字符。因为 ' ' 是一个空格字符,所以输出显示 ' ' 是一个空白字符。
  • 然后,将字符 c 设置为 '\t'(水平制表符)。isspace(c) 将再次检查 c 是否是空白字符。因为 '\t' 是一个水平制表符,所以输出显示 '\t' 是一个空白字符。
  • 最后,将字符 c 设置为 'A'isspace(c) 将检查 c 是否是空白字符。因为 'A' 不是空白字符,所以输出显示 'A' 不是一个空白字符。

注意事项

  • isspace 函数返回非零值表示字符是一个空白字符,返回0表示字符不是一个空白字符。
  • 参数 c 可以是字符的 ASCII 值,也可以是字符字面量。
  • 该函数通常用于在文本处理中检查字符是否是空白字符,以便进行分词、文本格式化或者输入处理。

7.iscntrl(int c)

iscntrl(int c) 函数用于判断字符 c 是否是控制字符。

函数签名

#include <cctype>

int iscntrl(int c);

参数

  • c:要检查的字符,以 int 类型表示。通常传入字符的 ASCII 值或字符字面量。

返回值

  • 如果 c 是一个控制字符,函数返回一个非零值(通常是1)。
  • 如果 c 不是控制字符,则返回0。

控制字符定义

控制字符是 ASCII 字符集中的一部分,它们通常不打印并且用于控制显示设备。它们的 ASCII 值范围是 0 到 31,以及 127 (DEL)。常见的控制字符包括:

  • ASCII 值为 0 到 31 的字符,如换行符 '\n' (10)、回车符 '\r' (13)、水平制表符 '\t' (9) 等。
  • ASCII 值为 127 的字符 (DEL)。

这些字符通常不可见,并且用于在文本处理和通信中实现格式化和控制。

示例

#include <iostream>
#include <cctype>

int main() {
    char c = '\n'; // 换行符
    
    if (iscntrl(c)) {
        std::cout << "Character with ASCII value " << static_cast<int>(c) << " is a control character." << std::endl;
    } else {
        std::cout << "Character with ASCII value " << static_cast<int>(c) << " is not a control character." << std::endl;
    }
    
    c = 'A'; // 普通可打印字符
    
    if (iscntrl(c)) {
        std::cout << "Character with ASCII value " << static_cast<int>(c) << " is a control character." << std::endl;
    } else {
        std::cout << "Character with ASCII value " << static_cast<int>(c) << " is not a control character." << std::endl;
    }
    
    c = '\t'; // 水平制表符
    
    if (iscntrl(c)) {
        std::cout << "Character with ASCII value " << static_cast<int>(c) << " is a control character." << std::endl;
    } else {
        std::cout << "Character with ASCII value " << static_cast<int>(c) << " is not a control character." << std::endl;
    }
    
    return 0;
}

解释

条件判断
  • 首先,定义字符 c 为 '\n'(换行符)。iscntrl(c) 将检查 c 是否是控制字符。因为 '\n' 是一个控制字符,所以输出显示换行符是一个控制字符。
  • 然后,将字符 c 设置为 'A'iscntrl(c) 将再次检查 c 是否是控制字符。因为 'A' 不是控制字符,所以输出显示 'A' 不是一个控制字符。
  • 最后,将字符 c 设置为 '\t'(水平制表符)。iscntrl(c) 将检查 c 是否是控制字符。因为 '\t' 不是控制字符,所以输出显示水平制表符不是一个控制字符。

注意事项

  • iscntrl 函数返回非零值表示字符是一个控制字符,返回0表示字符不是一个控制字符。
  • 参数 c 可以是字符的 ASCII 值,也可以是字符字面量。
  • 该函数通常用于在文本处理中检查字符是否是控制字符,以便进行文本过滤、解析或者特殊字符处理。

8.ispunct(int c)

ispunct(int c) 函数用于判断字符 c 是否是标点符号。

函数签名

#include <cctype>

int ispunct(int c);

参数

  • c:要检查的字符,以 int 类型表示。通常传入字符的 ASCII 值或字符字面量。

返回值

  • 如果 c 是一个标点符号,函数返回一个非零值(通常是1)。
  • 如果 c 不是标点符号,则返回0。

标点符号定义

标点符号是指在文本中用于标点和分隔的字符,通常不包括字母、数字或空格。这些字符在不同语言和文本处理系统中可能有所不同,但通常包括以下类型的字符:

  • 句点 .
  • 逗号 ,
  • 分号 ;
  • 冒号 :
  • 感叹号 !
  • 问号 ?
  • 引号 " 和 '
  • 括号 ( ) [ ] { }
  • 连字符 -
  • 斜杠 /
  • 等等

示例

#include <iostream>
#include <cctype>

int main() {
    char c = '.'; // 句点
    
    if (ispunct(c)) {
        std::cout << "Character " << c << " is a punctuation mark." << std::endl;
    } else {
        std::cout << "Character " << c << " is not a punctuation mark." << std::endl;
    }
    
    c = 'A'; // 字母
    
    if (ispunct(c)) {
        std::cout << "Character " << c << " is a punctuation mark." << std::endl;
    } else {
        std::cout << "Character " << c << " is not a punctuation mark." << std::endl;
    }
    
    c = '*'; // 星号
    
    if (ispunct(c)) {
        std::cout << "Character " << c << " is a punctuation mark." << std::endl;
    } else {
        std::cout << "Character " << c << " is not a punctuation mark." << std::endl;
    }
    
    return 0;
}

解释

条件判断
  • 首先,定义字符 c 为 '.'(句点)。ispunct(c) 将检查 c 是否是标点符号。因为 '.' 是一个标点符号,所以输出显示句点是一个标点符号。
  • 然后,将字符 c 设置为 'A'ispunct(c) 将再次检查 c 是否是标点符号。因为 'A' 不是标点符号,所以输出显示 'A' 不是一个标点符号。
  • 最后,将字符 c 设置为 '*'(星号)。ispunct(c) 将检查 c 是否是标点符号。因为 '*' 不是标点符号,所以输出显示星号不是一个标点符号。

注意事项

  • ispunct 函数返回非零值表示字符是一个标点符号,返回0表示字符不是一个标点符号。
  • 参数 c 可以是字符的 ASCII 值,也可以是字符字面量。
  • 标点符号的定义因语言和文本处理系统而异,但通常包括用于标点和分隔的符号。
  • 该函数通常用于文本处理中,用来识别和处理标点符号。

9.isxdigit(int c)

isxdigit(int c) 函数用于判断字符 c 是否是十六进制数字字符。

函数签名

#include <cctype>

int isxdigit(int c);

参数

  • c:要检查的字符,以 int 类型表示。通常传入字符的 ASCII 值或字符字面量。

返回值

  • 如果 c 是一个十六进制数字字符 (0-9a-fA-F),函数返回一个非零值(通常是1)。
  • 如果 c 不是十六进制数字字符,则返回0。

十六进制数字字符定义

十六进制数字字符是指以下字符:

  • 0 到 9(数字 0 到 9
  • a 到 f(小写字母 a 到 f
  • A 到 F(大写字母 A 到 F

这些字符用来表示十六进制数字系统中的数值。

示例

#include <iostream>
#include <cctype>

int main() {
    char c = '7'; // 十六进制数字字符
    
    if (isxdigit(c)) {
        std::cout << "Character " << c << " is a hexadecimal digit." << std::endl;
    } else {
        std::cout << "Character " << c << " is not a hexadecimal digit." << std::endl;
    }
    
    c = 'g'; // 字母
    
    if (isxdigit(c)) {
        std::cout << "Character " << c << " is a hexadecimal digit." << std::endl;
    } else {
        std::cout << "Character " << c << " is not a hexadecimal digit." << std::endl;
    }
    
    c = 'B'; // 十六进制数字字符
    
    if (isxdigit(c)) {
        std::cout << "Character " << c << " is a hexadecimal digit." << std::endl;
    } else {
        std::cout << "Character " << c << " is not a hexadecimal digit." << std::endl;
    }
    
    return 0;
}

解释

条件判断

  • 首先,定义字符 c 为 '7'isxdigit(c) 将检查 c 是否是十六进制数字字符。因为 '7' 是一个十六进制数字字符,所以输出显示 '7' 是一个十六进制数字字符。
  • 然后,将字符 c 设置为 'g'isxdigit(c) 将再次检查 c 是否是十六进制数字字符。因为 'g' 不是十六进制数字字符,所以输出显示 'g' 不是一个十六进制数字字符。
  • 最后,将字符 c 设置为 'B'isxdigit(c) 将检查 c 是否是十六进制数字字符。因为 'B' 是一个十六进制数字字符,所以输出显示 'B' 是一个十六进制数字字符。

注意事项

  • isxdigit 函数返回非零值表示字符是一个十六进制数字字符,返回0表示字符不是一个十六进制数字字符。
  • 参数 c 可以是字符的 ASCII 值,也可以是字符字面量。
  • 十六进制数字字符包括数字 0-9,小写字母 a-f 和大写字母 A-F
  • 该函数通常用于解析或验证十六进制数字输入,如处理十六进制数的字符串。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐