NO.8 <ctype.h> 字符处理
第8.5篇个人博客
写这篇博客的原因:
之前有了解到一些基础C语言题目是来判断字母,数字,字符的数量,以及经常会有大小写转换。
例如有一道题:
一开始我只能这样写:
#include <stdio.h>
int main() {
char ch = 'a'; // 要转换的字符
// 将小写字符转换为大写
if (ch >= 'a' && ch <= 'z') {
ch = ch - ('a' - 'A');
printf("小写字符转换为大写: %c\n", ch);
} else {
printf("不是小写字母,不需要转换: %c\n", ch);
}
// 将大写字符转换为小写
ch = 'A'; // 重新设置字符为大写字母
if (ch >= 'A' && ch <= 'Z') {
ch = ch + ('a' - 'A');
printf("大写字符转换为小写: %c\n", ch);
} else {
printf("不是大写字母,不需要转换: %c\n", ch);
}
return 0;
}
但是,欸,我突然想起来宋一告诉我有type.h这个头文件。
欸,我explore了一下,欸,真简洁。
就像这样:
使用字符大小写映射函数
#include <stdio.h>
#include <ctype.h>
int main() {
char ch = 'a'; // 要转换的字符
// 将小写字符转换为大写
if (islower(ch)) {
ch = toupper(ch);
printf("小写字符转换为大写: %c\n", ch);
} else {
printf("不是小写字母,不需要转换: %c\n", ch);
}
// 将大写字符转换为小写
ch = 'A'; // 重新设置字符为大写字母
if (isupper(ch)) {
ch = tolower(ch);
printf("大写字符转换为小写: %c\n", ch);
} else {
printf("不是大写字母,不需要转换: %c\n", ch);
}
return 0;
}
比那&& < >简介多了
<ctype.h>头文件·是什么?
<ctype.h>
头文件包含了一系列用于字符处理的函数,这些函数通常用于判断字符的属性,比如是否为字母、数字、空白字符等,或者用于转换字符的大小写。
字符分类函数:
1.isalpha(c)
c是否为字母(a-z、A-Z)
2.isdigit(c)
c是否为数字(0-9)
3.isalnum(c)
c是否为字母或数字
4.islower(c)
c是否为小写字母(a-z)
5.isupper(c)
c是否为大写字母(A-Z)
6.isspace(c)
c是否为空白字符,如空格、制表符、换行符等
7.isprint(c)
c是否可打印,即在屏幕上可见
8.ispunct(c)
c是否为标点符号(不包括空白字符或字母数字字符)
9.isxdigit(c)
c是否为十六进制数字字符(0-9、a-f、A-F)
10.isbank(c)
c是否为标准空白字符
11.iscntrl(c)
c是否为控制字符
12.isgraph(c)
c是否为可显示字符(除空格外)
isalpha(int c) 是字母吗?
isalpha(int c)
用于检查一个字符是否为字母(包括小写字母和大写字母)。它返回非零值(真)表示字符是字母,返回零(假)表示字符不是字母
示例
#include <stdio.h>
#include <ctype.h>
int main() {
char ch;
printf("请输入一个字符: ");
scanf(" %c", &ch);
if (isalpha(ch)) {
printf("'%c' 是一个字母。\n", ch);
} else {
printf("'%c' 不是一个字母。\n", ch);
}
return 0;
}
isdigit(int c) 是数字吗?
isdigit(int c)
用于检查一个字符是否为数字字符(0-9)。具体来说,它接受一个字符作为参数,并返回一个非零值(真)如果该字符是数字字符,否则返回零(假)
在ASCII字符集中,数字字符 ‘0’ 到 ‘9’ 的字符编码是连续的,分别对应整数值 48 到 57。因此,isdigit 函数可以通过检查字符的编码来确定是否为数字字符。
示例
#include <stdio.h>
#include <ctype.h>
int main() {
char ch = '5';
if (isdigit(ch)) {
printf("'%c' 是一个数字字符。\n", ch);
} else {
printf("'%c' 不是一个数字字符。\n", ch);
}
return 0;
}
isalnum(int c)是字母或数字吗?
isalnum
函数结合了 isalpha
函数(检查字符是否为字母)和 isdigit
函数(检查字符是否为数字字符)的功能。它用于确定字符是否是字母或数字的任何组合。
示例
#include <stdio.h>
#include <ctype.h>
int main() {
char ch = 'A';
if (isalnum(ch)) {
printf("'%c' 是一个字母或数字字符。\n", ch);
} else {
printf("'%c' 不是一个字母或数字字符。\n", ch);
}
return 0;
}
其他字符分类函数不再赘述
下面我们通过将字符分类函数应用于字符串“”azAZ0 !\t“中的字符,来展示这些函数(不包括C99中新增的isbank函数)的作用:
tchrtest.c
#include <stdio.h>
#include <ctype.h>
int main() {
char str[] = "azAZ0 !\t";
int i;
printf("Character\tisalnum\tisalpha\tiscntrl\tisdigit\tisgraph\tislower\tisprint\tispunct\tisspace\tisupper\tisxdigit\n");
for (i = 0; str[i]; i++) {
printf("%c\t", str[i]);
printf("%d\t", isalnum(str[i]));
printf("%d\t", isalpha(str[i]));
printf("%d\t", iscntrl(str[i]));
printf("%d\t", isdigit(str[i]));
printf("%d\t", isgraph(str[i]));
printf("%d\t", islower(str[i]));
printf("%d\t", isprint(str[i]));
printf("%d\t", ispunct(str[i]));
printf("%d\t", isspace(str[i]));
printf("%d\t", isupper(str[i]));
printf("%d\n", isxdigit(str[i]));
}
return 0;
}
字符大小写映射函数
int tolower(int c)
int toupper(int c)
tolower
函数返回与作为参数传递的字母相对应的小写字母,而toupper
函数返回与作为参数传递的字母对应的大写字母。对于这两个函数,如果所传参数不是字母,那么将返回原始字符,不加任何改变。