字符分类函数与字符转换函数
目录
一、概述
二、常用字符分类函数及示例
1、islower() - 判断是否为小写字母
功能描述
函数原型
参数说明
返回值
使用说明
2、isupper() - 判断是否为大写字母
功能描述
函数原型
参数说明
返回值
使用说明
3、isdigit() - 判断是否为十进制数字
功能描述
函数原型
参数说明
返回值
使用说明
4、isalpha() - 判断是否为字母
功能描述
函数原型
参数说明
返回值
使用说明
5、isalnum() - 判断是否为字母或数字
功能描述
函数原型
参数说明
返回值
使用说明
6、isspace() - 判断是否为空白字符
功能描述
函数原型
参数说明
返回值
空白字符包括
使用说明
7、ispunct() - 判断是否为标点符号
功能描述
函数原型
参数说明
返回值
标点符号的定义
使用说明
8、isxdigit() - 判断是否为十六进制数字
功能描述
函数原型
参数说明
返回值
有效的十六进制数字字符包括
使用说明
9、isgraph() - 判断是否为图形字符
功能描述
函数原型
参数说明
返回值
图形字符的定义
使用说明
10、isprint() - 判断是否为可打印字符
功能描述
函数原型
参数说明
返回值
可打印字符的范围
使用说明
11、iscntrl() - 判断是否为控制字符
功能描述
函数原型
参数说明
返回值
控制字符的范围
使用说明
三、综合应用示例
统计字符串中各类字符数量
四、字符转换函数
1、int tolower(int c);
2、int toupper(int c);
使用示例:
程序说明:
注意事项:
一、概述
C语言提供了一系列字符分类函数,用于判断一个字符属于哪种类型。这些函数都定义在ctype.h
头文件中,它们接受一个int
类型参数(字符的ASCII码),并返回一个整数值表示判断结果(非0表示真,0表示假)。
二、常用字符分类函数及示例
1、islower()
- 判断是否为小写字母
功能描述
islower()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为小写字母(a-z)。
函数原型
int islower(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个小写字母(a-z) -
0:如果
c
不是小写字母
使用说明
-
需要包含头文件
<ctype.h>
-
该函数只对小写字母 a-z 返回真值
-
对于其他任何字符(包括大写字母、数字、标点符号等)都返回 0
#include <stdio.h>
#include <ctype.h>int main() {char str[] = "Hello World 123!";int i = 0;while (str[i]) {if (islower(str[i])) {printf("'%c' is a lowercase letter\n", str[i]);}i++;}return 0;
}
2、isupper()
- 判断是否为大写字母
功能描述
isupper()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为大写字母(A-Z)。
函数原型
int isupper(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个大写字母(A-Z) -
0:如果
c
不是大写字母
使用说明
-
需要包含头文件
<ctype.h>
-
该函数只对大写字母 A-Z 返回真值
-
对于其他任何字符(包括小写字母、数字、标点符号等)都返回 0
#include <stdio.h>
#include <ctype.h>int main() {char c = 'A';if (isupper(c)) {printf("'%c' is an uppercase letter\n", c);} else {printf("'%c' is not an uppercase letter\n", c);}return 0;
}
3、isdigit()
- 判断是否为十进制数字
功能描述
isdigit()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为十进制数字字符(0-9)。
函数原型
int isdigit(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个十进制数字字符(0-9) -
0:如果
c
不是十进制数字字符
使用说明
-
需要包含头文件
<ctype.h>
-
该函数只对数字字符 0-9 返回真值
-
对于其他任何字符(包括字母、标点符号、空白字符等)都返回 0
-
注意与
isxdigit()
的区别:isdigit()
只识别 0-9,而isxdigit()
还识别 a-f 和 A-F
#include <stdio.h>
#include <ctype.h>int main() {char input[] = "Year 2023";int digit_count = 0;for (int i = 0; input[i]; i++) {if (isdigit(input[i])) {digit_count++;}}printf("The string contains %d digits\n", digit_count);return 0;
}
4、isalpha()
- 判断是否为字母
功能描述
isalpha()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为字母字符(a-z 或 A-Z)。
函数原型
int isalpha(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个字母字符(a-z 或 A-Z) -
0:如果
c
不是字母字符
使用说明
-
需要包含头文件
<ctype.h>
-
该函数对大小写字母(a-z 和 A-Z)都返回真值
-
对于数字、标点符号、空白字符等其他字符都返回 0
-
相当于
isupper(c) || islower(c)
的组合效果
#include <stdio.h>
#include <ctype.h>int main() {char ch = 'z';if (isalpha(ch)) {printf("'%c' is an alphabetic character\n", ch);} else {printf("'%c' is not an alphabetic character\n", ch);}return 0;
}
5、isalnum()
- 判断是否为字母或数字
功能描述
isalnum()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为字母(a-z 或 A-Z)或数字(0-9)。
函数原型
int isalnum(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个字母或数字字符 -
0:如果
c
不是字母或数字字符
使用说明
-
需要包含头文件
<ctype.h>
-
该函数相当于
isalpha(c) || isdigit(c)
的组合效果 -
对于标点符号、空白字符、控制字符等其他字符都返回 0
-
常用于验证用户名、密码等只允许包含字母和数字的场合
#include <stdio.h>
#include <ctype.h>int main() {char password[] = "Secure123";int valid = 1;for (int i = 0; password[i]; i++) {if (!isalnum(password[i])) {valid = 0;break;}}if (valid) {printf("Password contains only letters and digits\n");} else {printf("Password contains invalid characters\n");}return 0;
}
6、isspace()
- 判断是否为空白字符
功能描述
isspace()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为空白字符。
函数原型
int isspace(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个空白字符 -
0:如果
c
不是空白字符
空白字符包括
标准空白字符包括:
-
空格 (' ')
-
换页符 ('\f')
-
换行符 ('\n')
-
回车符 ('\r')
-
水平制表符 ('\t')
-
垂直制表符 ('\v')
使用说明
-
需要包含头文件
<ctype.h>
-
该函数对上述所有空白字符都返回真值
-
对于其他任何可见字符都返回 0
-
常用于文本处理中的单词分割和格式检查
#include <stdio.h>
#include <ctype.h>int main() {char text[] = "This has\nmultiple\tspaces";int space_count = 0;for (int i = 0; text[i]; i++) {if (isspace(text[i])) {space_count++;}}printf("The string contains %d whitespace characters\n", space_count);return 0;
}
7、ispunct()
- 判断是否为标点符号
功能描述
ispunct()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为标点符号字符。
函数原型
int ispunct(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个标点符号字符 -
0:如果
c
不是标点符号字符
标点符号的定义
标点符号是指所有不属于以下类别的可打印字符:
-
空白字符(
isspace()
返回 true 的字符) -
字母字符(
isalpha()
返回 true 的字符) -
数字字符(
isdigit()
返回 true 的字符)
常见的标点符号包括:
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
使用说明
-
需要包含头文件
<ctype.h>
-
该函数对所有标点符号字符返回真值
-
对于字母、数字、空白字符和控制字符都返回 0
-
常用于文本分析、词法分析和数据清洗
#include <stdio.h>
#include <ctype.h>int main() {char sentence[] = "Hello, world! How are you?";int punct_count = 0;for (int i = 0; sentence[i]; i++) {if (ispunct(sentence[i])) {printf("Found punctuation: '%c'\n", sentence[i]);punct_count++;}}printf("Total punctuation marks: %d\n", punct_count);return 0;
}
8、isxdigit()
- 判断是否为十六进制数字
功能描述
isxdigit()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为有效的十六进制数字字符。
函数原型
int isxdigit(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个有效的十六进制数字字符 -
0:如果
c
不是有效的十六进制数字字符
有效的十六进制数字字符包括
-
十进制数字:'0'-'9'
-
小写字母:'a'-'f'
-
大写字母:'A'-'F'
使用说明
-
需要包含头文件
<ctype.h>
-
该函数对上述所有十六进制数字字符返回真值
-
常用于处理十六进制字符串、颜色代码、内存地址等场景
-
与
isdigit()
的区别:isdigit()
只识别 '0'-'9',而isxdigit()
还识别 'a'-'f' 和 'A'-'F'
#include <stdio.h>
#include <ctype.h>int main() {char hex[] = "0x1A3f";int valid = 1;for (int i = 2; hex[i]; i++) { // Skip '0x' prefixif (!isxdigit(hex[i])) {valid = 0;break;}}if (valid) {printf("'%s' is a valid hexadecimal number\n", hex);} else {printf("'%s' contains invalid hexadecimal digits\n", hex);}return 0;
}
9、isgraph()
- 判断是否为图形字符
功能描述
isgraph()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为图形字符(即可见字符,不包括空格)。
函数原型
int isgraph(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个图形字符(可见且非空格) -
0:如果
c
不是图形字符(包括空格和控制字符)
图形字符的定义
图形字符是指所有满足以下条件的字符:
-
是可打印字符(
isprint()
返回 true) -
不是空格字符(
' '
)
具体包括:
-
字母(a-z, A-Z)
-
数字(0-9)
-
标点符号(
ispunct()
返回 true 的字符)
使用说明
-
需要包含头文件
<ctype.h>
-
该函数对所有图形字符返回真值
-
空格字符(ASCII 32)会返回 false
-
常用于文本处理、数据验证和格式化输出
#include <stdio.h>
#include <ctype.h>int main() {char chars[] = {'A', ' ', '\n', '\t', '!'};for (int i = 0; i < 5; i++) {if (isgraph(chars[i])) {printf("'%c' (ASCII %d) is a graphical character\n", chars[i], chars[i]);} else {printf("'%c' (ASCII %d) is not a graphical character\n", chars[i], chars[i]);}}return 0;
}
10、isprint()
- 判断是否为可打印字符
功能描述
isprint()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为可打印字符(包括空格)。
函数原型
int isprint(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个可打印字符(包括空格) -
0:如果
c
不是可打印字符(控制字符或不可见字符)
可打印字符的范围
可打印字符包括:
-
空格字符(ASCII 32)
-
所有图形字符(
isgraph()
返回 true 的字符):-
字母(a-z, A-Z)
-
数字(0-9)
-
标点符号
-
其他可见符号
-
使用说明
-
需要包含头文件
<ctype.h>
-
该函数对 ASCII 码 32(空格)到 126(~)之间的字符返回真值
-
对于控制字符(ASCII 0-31 和 127)返回 false
-
常用于文本处理、输入验证和格式化输出
#include <stdio.h>
#include <ctype.h>int main() {char data[] = {'H', '\a', 'i', '\0'};for (int i = 0; data[i]; i++) {if (isprint(data[i])) {printf("'%c' is printable\n", data[i]);} else {printf("Character with ASCII %d is not printable\n", data[i]);}}return 0;
}
11、iscntrl()
- 判断是否为控制字符
功能描述
iscntrl()
是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为控制字符。
函数原型
int iscntrl(int c);
参数说明
c
:要检测的字符,以 int
形式传递。虽然参数类型是 int
,但通常传递的是 char
类型,编译器会自动进行类型转换。
返回值
-
非零值:如果
c
是一个控制字符 -
0:如果
c
不是控制字符
控制字符的范围
控制字符包括:
-
ASCII 码 0x00 (NUL) 到 0x1F (US)
-
ASCII 码 0x7F (DEL)
-
其他实现定义的控制字符
常见的控制字符有:
-
\0
(空字符) -
\a
(响铃) -
\b
(退格) -
\t
(水平制表符) -
\n
(换行符) -
\v
(垂直制表符) -
\f
(换页符) -
\r
(回车符)
使用说明
-
需要包含头文件
<ctype.h>
-
该函数对所有控制字符返回真值
-
对于可打印字符(包括空格)返回 false
-
常用于处理二进制数据、终端控制和文本解析
#include <stdio.h>
#include <ctype.h>int main() {char controls[] = {'\n', '\t', '\a', 'A', ' '};for (int i = 0; i < 5; i++) {if (iscntrl(controls[i])) {printf("ASCII %d is a control character\n", controls[i]);} else {printf("ASCII %d ('%c') is not a control character\n", controls[i], controls[i]);}}return 0;
}
三、综合应用示例
统计字符串中各类字符数量
#include <stdio.h>
#include <ctype.h>int main() {char text[] = "Hello World! 123\nThis is a test.\t";int upper = 0, lower = 0, digit = 0, space = 0, punct = 0, other = 0;for (int i = 0; text[i]; i++) {if (isupper(text[i])) upper++;else if (islower(text[i])) lower++;else if (isdigit(text[i])) digit++;else if (isspace(text[i])) space++;else if (ispunct(text[i])) punct++;else other++;}printf("Analysis of the string:\n");printf("Uppercase letters: %d\n", upper);printf("Lowercase letters: %d\n", lower);printf("Digits: %d\n", digit);printf("Whitespace characters: %d\n", space);printf("Punctuation marks: %d\n", punct);printf("Other characters: %d\n", other);return 0;
}
这些字符分类函数在实际编程中非常有用,特别是在文本处理、输入验证和数据分析等场景中。
四、字符转换函数
C语言标准库<ctype.h>提供了两个常用的字符转换函数:
1、int tolower(int c);
-
功能:将大写字母转换为对应的小写字母
-
参数:c - 要转换的字符(以int形式传递)
-
返回值:转换后的小写字母,若参数不是大写字母则返回原字符
2、int toupper(int c);
-
功能:将小写字母转换为对应的大写字母
-
参数:c - 要转换的字符(以int形式传递)
-
返回值:转换后的大写字母,若参数不是小写字母则返回原字符
使用示例:
#include <stdio.h>
#include <ctype.h>int main() {int i = 0;char str[] = "Test String.\n";char c;while (str[i]) {c = str[i];if (islower(c)) // 先判断是否为小写字母c = toupper(c); // 转换为大写putchar(c);i++;}return 0;
}
程序说明:
-
该程序演示了如何将字符串中的小写字母转换为大写字母
-
使用islower()函数先判断字符是否为小写字母
-
使用toupper()函数进行实际的转换操作
-
转换后的字符通过putchar()输出
注意事项:
-
这些函数只能处理ASCII字符集中的字母字符
-
对于非字母字符,函数会直接返回原字符
-
相较于手动加减32的转换方式,使用这些标准函数更具可移植性和安全性