目录
1 isdigit()
1.1 函数原型
#include <ctype.h>
int isdigit(int c);
1.2 功能说明
功能:
- 检查参数 c 是否是数字。
返回值:
- 如果 c 是数字('0' - '9'),返回非零值(真)。
- 如果 c 不是数字,返回 0(假)。
ASCII 码范围:
- 数字('0' - '9'),对应的 ASCII 码值为 48 到 57。
1.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 isdigit 函数
int main()
{
char str[] = "Hello, World! 12345@#678$";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是数字
if (isdigit(str[i]))
{
// 短横线分隔
printf("%c-", str[i]);
// 1-2-3-4-5-6-7-8-
}
i++;
}
return 0;
}
2 isxdigit()
2.1 函数原型
#include <ctype.h>
int isxdigit(int c);
2.2 功能说明
功能:
- 检查参数 c 是否是十六进制数字字符。
返回值:
- 如果 c 是十六进制数字('0' - '9'、'a' - 'f'、'A' - 'F')字符,返回非零值(真)。
- 如果 c 不是十六进制数字字符,返回 0(假)。
ASCII 码范围:
- 数字('0' - '9'),对应的 ASCII 码值为 48 到 57。
- 小写字母('a' - 'f'),对应的 ASCII 码值为 97 到 102。
- 大写字母('A' - 'F'),对应的 ASCII 码值为 65 到 70。
2.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 isxdigit 函数
int main()
{
char str[] = "Hello, World! 12345ABCDEF@#$abcdef!";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是十六进制数字
if (isxdigit(str[i]))
{
printf("%c-", str[i]);
// e-d-1-2-3-4-5-A-B-C-D-E-F-a-b-c-d-e-f-
}
i++;
}
return 0;
}
3 islower()
3.1 函数原型
#include <ctype.h>
int islower(int c);
3.2 功能说明
功能:
- 检查参数 c 是否是小写字母。
返回值:
- 如果 c 是小写字母('a' - 'z'),返回非零值(真)。
- 如果 c 不是小写字母,返回 0(假)。
ASCII 码范围:
- 小写字母('a' - 'z'),对应的 ASCII 码值为 97 到 122。
3.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 islower 函数
int main()
{
char str[] = "Hello, World! 12345@#$";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是小写字母
if (islower(str[i]))
{
printf("%c-", str[i]);
// e-l-l-o-o-r-l-d-
}
i++;
}
return 0;
}
4 isupper()
4.1 函数原型
#include <ctype.h>
int isupper(int c);
4.2 功能说明
功能:
- 检查参数 c 是否是大写字母。
返回值:
- 如果 c 是大写字母('A' - 'Z'),返回非零值(真)。
- 如果 c 不是大写字母,返回 0(假)。
ASCII 码范围:
- 大写字母('A' - 'Z'),对应的 ASCII 码值为 65 到 90。
4.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 isupper 函数
int main()
{
char str[] = "Hello, World! 12345@#$Thanks";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是大写字母
if (isupper(str[i]))
{
printf("%c-", str[i]);
// H-W-T-
}
i++;
}
return 0;
}
5 isalnum()
5.1 函数原型
#include <ctype.h>
int isalnum(int c);
5.2 功能说明
功能:
- 检查参数 c 是否是字母(大写或小写)或数字。
返回值:
- 如果 c 是字母(大写或小写)或数字,返回非零值(真)。
- 如果 c 不是字母或数字,返回 0(假)。
ASCII 码范围:
- 字母(A - Z, a - z)
- 数字(0 - 9)
5.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 isalnum 函数
int main()
{
char str[] = "Hello, World! 123@#$^&*()";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是字母或数字
if (isalnum(str[i]))
{
printf("%c-", str[i]);
// H-e-l-l-o-W-o-r-l-d-1-2-3-
}
i++;
}
return 0;
}
6 isalpha()
6.1 函数原型
#include <ctype.h>
int isalpha(int c);
6.2 功能说明
功能:
- 检查参数 c 是否是字母(大写或小写)。
返回值:
- 如果 c 是字母(大写或小写),返回非零值(真)。
- 如果 c 不是字母,返回 0(假)。
ASCII 码范围:
- 字母(A - Z, a - z)
6.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 isalpha 函数
int main()
{
char str[] = "Hello, World! 123@#$^&*()";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是字母
if (isalpha(str[i]))
{
printf("%c-", str[i]);
// H-e-l-l-o-W-o-r-l-d-
}
i++;
}
return 0;
}
7 isascii()
7.1 函数原型
#include <ctype.h>
int isascii(int c);
7.2 功能说明
功能:
- 检查参数 c 是否是 ASCII 字符。
返回值:
- 如果 c 是 ASCII 字符(即 c 在 0 到 127 之间),返回非零值(真)。
- 如果 c 不是 ASCII 字符,返回 0(假)。
ASCII 码范围:
- ASCII 码值在 0 到 127 之间。
7.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 isascii 函数
int main()
{
char str[] = "Hello, 世界! 12345@#$程序员";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是 ASCII 字符
if (isascii(str[i]))
{
printf("%c-", str[i]);
// H-e-l-l-o-,- -!- -1-2-3-4-5-@-#-$-
}
i++;
}
return 0;
}
8 iscntrl()
8.1 函数原型
#include <ctype.h>
int iscntrl(int c);
8.2 功能说明
功能:
- 检查参数 c 是否是控制字符。控制字符通常是不可打印的字符。
返回值:
- 如果 c 是控制字符,返回非零值(真)。
- 如果 c 不是控制字符,返回 0(假)。
ASCII 码范围:
- ASCII 码值在 0 到 31 之间,加上 127(DEL)。
8.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 iscntrl 函数
int main()
{
char str[] = "Hello,World!\t\n\x1b[31mRed Text\x1b[0m";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是控制字符
if (iscntrl(str[i]))
{
printf("控制字符的位置 %d: '\\x%02x'\n", i, str[i]);
// 控制字符的位置 12: '\x09'
// 控制字符的位置 13: '\x0a'
// 控制字符的位置 14: '\x1b'
// 控制字符的位置 27: '\x1b'
}
i++;
}
return 0;
}
提示:
\\x%02x:
- \\:这是一个转义序列,表示一个反斜杠字符 \。在字符串中,单个反斜杠 \ 通常用于转义特殊字符,所以要输出一个实际的反斜杠,需要使用 \\。
- x:这是一个普通的字符 x,直接输出为 x。
- %02x:
- %:格式说明符的起始标志。
- 02:指定输出的宽度为 2 位,不足 2 位时用前导零填充。
- x:指定输出为小写的十六进制数。
ASCII 码:
\t(制表符)的 ASCII 码值为 9。
\n(换行符)的 ASCII 码值为 10。
\x1b(ESC 控制字符)的 ASCII 码值为 27。
9 isprint()
9.1 函数原型
#include <ctype.h>
int isprint(int c);
9.2 功能说明
功能:
- 检查参数 c 是否是可打印字符(包括空格)。
返回值:
- 如果 c 是可打印字符(即 c 在 32 到 126 之间),返回非零值(真)。
- 如果 c 不是可打印字符,返回 0(假)。
ASCII 码范围:
- 可打印字符(32 到 126),包括字母、数字、标点符号和空格。
9.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 isprint 函数
int main()
{
char str[] = "Hello, World! 12345@#$\t\n";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是可打印字符
if (isprint(str[i]))
{
printf("%c-", str[i]);
// H-e-l-l-o-,- -W-o-r-l-d-!- - - - - - - -1-2-3-4-5-@-#-$-
}
i++;
}
return 0;
}
10 isgraph()
10.1 函数原型
#include <ctype.h>
int isgraph(int c);
10.2 功能说明
功能:
- 检查参数 c 是否是可打印字符且不是空格。
返回值:
- 如果 c 是可打印字符且不是空格(即 c 在 33 到 126 之间),返回非零值(真)。
- 如果 c 不是可打印字符或为空格,返回 0(假)。
ASCII 码范围:
- 可打印字符且不是空格(33 到 126),包括字母、数字、标点符号等。
10.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 isgraph 函数
int main()
{
char str[] = "Hello, World! 12345@#$ ";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是可打印字符且不是空格
if (isgraph(str[i]))
{
printf("%c-", str[i]);
// H-e-l-l-o-,-W-o-r-l-d-!-1-2-3-4-5-@-#-$-
}
i++;
}
return 0;
}
11 ispunct()
11.1 函数原型
#include <ctype.h>
int ispunct(int c);
11.2 功能说明
功能:
- 检查参数 c 是否是英文标点符号。
返回值:
- 如果 c 是英文标点符号(即 c 在 33 到 47、58 到 64、91 到 96、123 到 126 之间),返回非零值(真)。
- 如果 c 不是标点符号,返回 0(假)。
英文标点符号的 ASCII 码值范围包括:
- 33 到 47:!、"、#、$、%、&、'、(、)、*、+、,、-、.、/
- 58 到 64::、;、<、=、>、?、@
- 91 到 96:[、\、]、^、_、``
- 123 到 126:{、|、}、~
11.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 ispunct 函数
int main()
{
char str[] = "Hello, World! 12~@#¥$^()/*-+!……&*34.。";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是标点符号
if (ispunct(str[i]))
{
printf("%c、", str[i]);
// ,、!、~、@、#、$、^、(、)、/、*、-、+、!、&、*、.、
// 只能是英文标点符号
}
i++;
}
return 0;
}
12 isspace()
12.1 函数原型
#include <ctype.h>
int isspace(int c);
12.2 功能说明
功能:
- 检查参数 c 是否是空白字符。
返回值:
- 如果 c 是空白字符,返回非零值(真)。
- 如果 c 不是空白字符,返回 0(假)。
空白字符的 ASCII 码范围:
- 空格( ):ASCII 码值 32
- 水平制表符(\t):ASCII 码值 9
- 新行符(\n):ASCII 码值 10
- 垂直制表符(\v):ASCII 码值 11
- 换页符(\f):ASCII 码值 12
- 回车符(\r):ASCII 码值 13
12.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 isspace 函数
int main()
{
char str[] = "Hello, World! \t\n\r\f\v";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 如果当前字符是空白字符
if (isspace(str[i]))
{
printf("%d - %c\n", i, str[i]);
// 6 -
// 13 -
// 14 -
// 15 -
// 16 -
// 17 -
// 18 -
}
i++;
}
return 0;
}
13 toascii()
13.1 函数原型
#include <ctype.h>
int toascii(int c);
13.2 功能说明
功能:
- 将参数 c 转换为对应的 ASCII 字符。
返回值:
- 返回 c 的低 7 位(即 c & 0x7F),确保结果在 0 到 127 之间。
用途:
- 用于将多字节字符或扩展 ASCII 字符转换为标准的 7 位 ASCII 字符。
13.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 toascii 函数
int main()
{
char str[] = "123@#$ABCabc";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 将字符转换为 ASCII 字符
int ascii_char = toascii(str[i]);
printf("Original: %c, ASCII: %c (Code: %d)\n", str[i], ascii_char, ascii_char);
// Original: 1, ASCII: 1 (Code: 49)
// Original: 2, ASCII: 2 (Code: 50)
// Original: 3, ASCII: 3 (Code: 51)
// Original: @, ASCII: @ (Code: 64)
// Original: #, ASCII: # (Code: 35)
// Original: $, ASCII: $ (Code: 36)
// Original: A, ASCII: A (Code: 65)
// Original: B, ASCII: B (Code: 66)
// Original: C, ASCII: C (Code: 67)
// Original: a, ASCII: a (Code: 97)
// Original: b, ASCII: b (Code: 98)
// Original: c, ASCII: c (Code: 99)
i++;
}
return 0;
}
14 tolower()
14.1 函数原型
#include <ctype.h>
int tolower(int c);
14.2 功能说明
功能:
- 将参数 c 转换为对应的小写字母。
返回值:
- 如果 c 是大写字母('A' - 'Z'),返回其对应的小写字母('a' - 'z')。
- 如果 c 已经是小写字母或不是字母,返回 c 本身。
ASCII 码范围:
- 大写字母('A' - 'Z'),对应的 ASCII 码值为 65 到 90。
- 小写字母('a' - 'z'),对应的 ASCII 码值为 97 到 122。
14.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 tolower 函数
int main()
{
char str[] = "HELLO, World! 12345@#$";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 将字符转换为小写
str[i] = tolower(str[i]);
i++;
}
// 输出转换后的字符串
printf("转换为小写字母: %s\n", str);
// 转换为小写字母: hello, world! 12345@#$
return 0;
}
15 toupper()
15.1 函数原型
#include <ctype.h>
int toupper(int c);
15.2 功能说明
功能:
- 将参数 c 转换为对应的大写字母。
返回值:
- 如果 c 是小写字母('a' - 'z'),返回其对应的大写字母('A' - 'Z')。
- 如果 c 已经是大写字母或不是字母,返回 c 本身。
ASCII 码范围:
- 小写字母('a' - 'z'),对应的 ASCII 码值为 97 到 122。
- 大写字母('A' - 'Z'),对应的 ASCII 码值为 65 到 90。
15.3 案例演示
#include <stdio.h>
#include <ctype.h> // 引入 toupper 函数
int main()
{
char str[] = "Hello, World! 12345@#$";
int i = 0;
// 遍历字符串
while (str[i] != '\0')
{
// 将字符转换为大写
str[i] = toupper(str[i]);
i++;
}
// 输出转换后的字符串
printf("转换为大写字母: %s\n", str);
// 转换为大写字母: HELLO, WORLD! 12345@#$
return 0;
}
16 总结对比表
函数原型 | 功能说明 | 返回值 |
---|---|---|
int isdigit(int c); | 检查参数 c 是否是数字。 | 如果 c 是数字('0' - '9'),返回非零值(真)。 如果 c 不是数字,返回 0(假)。 |
int isxdigit(int c); | 检查参数 c 是否是十六进制数字字符。 | 如果 c 是十六进制数字('0' - '9'、'a' - 'f'、'A' - 'F')字符,返回非零值(真)。 如果 c 不是十六进制数字字符,返回 0(假)。 |
int islower(int c); | 检查参数 c 是否是小写字母。 | 如果 c 是小写字母('a' - 'z'),返回非零值(真)。 如果 c 不是小写字母,返回 0(假)。 |
int isupper(int c); | 检查参数 c 是否是大写字母。 | 如果 c 是大写字母('A' - 'Z'),返回非零值(真)。 如果 c 不是大写字母,返回 0(假)。 |
int isalnum(int c); | 检查参数 c 是否是字母(大写或小写)或数字。 | 如果 c 是字母(大写或小写)或数字,返回非零值(真)。 如果 c 不是字母或数字,返回 0(假)。 |
int isalpha(int c); | 检查参数 c 是否是字母(大写或小写)。 | 如果 c 是字母(大写或小写),返回非零值(真)。 如果 c 不是字母,返回 0(假)。 |
int isascii(int c); | 检查参数 c 是否是 ASCII 字符。 | 如果 c 是 ASCII 字符(即 c 在 0 到 127 之间),返回非零值(真)。 |
int iscntrl(int c); | 检查参数 c 是否是控制字符。控制字符通常是不可打印的字符。 | 如果 c 是控制字符,返回非零值(真)。 |
int isgraph(int c); | 检查参数 c 是否是可打印字符且不是空格。 | 如果 c 是可打印字符且不是空格(即 c 在 33 到 126 之间),返回非零值(真)。 如果 c 不是可打印字符或为空格,返回 0(假)。 |
int isprint(int c); | 检查参数 c 是否是可打印字符(包括空格)。 | 如果 c 是可打印字符(即 c 在 32 到 126 之间),返回非零值(真)。 如果 c 不是可打印字符,返回 0(假)。 |
int ispunct(int c); | 检查参数 c 是否是标点符号。 | 如果 c 是标点符号(即 c 在 33 到 47、58 到 64、91 到 96、123 到 126 之间),返回非零值(真)。 如果 c 不是标点符号,返回 0(假)。 |
int isspace(int c); | 检查参数 c 是否是空白字符(空格、制表、换行、换页等)。 | 如果 c 是空白字符,返回非零值(真)。 如果 c 不是空白字符,返回 0(假)。 |
int toascii(int c); | 将参数 c 转换为对应的 ASCII 字符。 | 返回 c 的低 7 位(即 c & 0x7F),确保结果在 0 到 127 之间。 |
int tolower(int c); | 将参数 c 转换为对应的小写字母。 | 如果 c 是大写字母('A' - 'Z'),返回其对应的小写字母('a' - 'z')。 如果 c 已经是小写字母或不是字母,返回 c 本身。 |
int toupper(int c); | 将参数 c 转换为对应的大写字母。 | 如果 c 是小写字母('a' - 'z'),返回其对应的大写字母('A' - 'Z')。 |
- 头文件:上面表格中的这些函数都定义在 ctype.h 头文件中,因此在使用这些函数之前,需要包含这个头文件。
- 参数类型:尽管这些函数通常与 char 类型的字符一起使用,但它们的参数类型实际上是 int。这是因为这些函数被设计为能够处理 EOF(文件结束符)作为特殊值,它通常被定义为 -1(在 C 标准中,EOF 的确切值未在标准中指定为 -1,但几乎所有现代实现都将其定义为 -1)。由于 char 类型(无论是有符号还是无符号)通常不能直接存储 -1(无符号 char 无法存储负数,而有符号 char 虽然可以表示负数,但在一些环境中 -1 可能无法直接存储为 char,因为 char 的符号位表示可能依赖于具体的编译器和平台),通过将参数类型定义为 int,这些函数能够区分正常的字符值和 EOF。
- 返回值:大多数函数返回一个非零值(通常是整数 1)来表示真(即条件满足),返回零来表示假(即条件不满足)。然而,tolower 和 toupper 函数返回转换后的字符,如果字符不需要转换,则返回原始字符。
- 用途:这些函数广泛用于文本处理、字符串解析、数据验证等场景。例如,isdigit 函数可以用于检查用户输入是否只包含数字,isalpha 和 isalnum 函数可以用于检查字符串是否包含字母或字母数字字符,而 tolower 和 toupper 函数则常用于实现不区分大小写的字符串比较。
- 注意事项:虽然这些函数在处理 ASCII 字符时非常有效,但在处理非 ASCII 字符集(如 UTF-8 编码的 Unicode 字符)时可能需要额外的注意。UTF-8 编码的字符可能由多个字节组成,而 ctype.h 中的函数是按单个字节(即 char)进行操作的。因此,在处理 UTF-8 或其他多字节编码的文本时,可能需要使用专门的库或函数来处理字符的完整性和属性。