c语言——字符函数
gogogo出发咯
目录
一、字符分类函数
1.1. iscntrl 函数
1.1.1 iscntrl函数的使用
1.2 isspace函数
1.2.1 空白字符的种类
1.2.2 isspace函数的使用
1.3 islower函数 和 isupper函数
二、字符转换函数
2.1 tolower和toupper
2.2 tolower和toupper的具体实现
在编程的过程中我们需要处理很多字符和字符串,为了方便操作字符和字符串,c语言标准库中提供了一系列库函数,接下来我们就来看看这些函数
一、字符分类函数
c语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。
这些函数的使用都需要包含一个头文件 ctype.h (后续小节不在赘述)
- iscntrl —— 任何控制字符
- isspace —— 空白字符:空格'',换页 '\f',换行 ‘\n’,回车'\r',制表符'\t',或者垂直制表符'\v'。
- isdigit—— 十进制数字
- isxdigit —— 十六进制数字,包过所有十进制数字符,小写字母a~f,大写字母A~F
- islower —— 小写字母
- isupper ——大写字母
- isalpha —— 字母a~f或A~F
- isalnum —— 字母或者数字
- ispunct —— 标点符号
- isgraph —— 任何图形字符
- isprint —— 任何可以打印的字符,也包括图形字符和空白字符
1.1. iscntrl 函数
iscntrl
是 C 语言标准库中的一个函数,用于检查一个字符是否是控制字符。控制字符是一些不用于打印的字符,它们通常用于控制设备(如打印机)或文本格式(如换行、回车等)。
控制字符的范围通常是 ASCII 码表中的前 32 个字符(从 0 到 31),以及 127(DEL)。
包括:
- 0: NUL (空字符)
- 1: SOH (标题开始)
- 2: STX (文本开始)
- 3: ETX (文本结束)
- 4: EOT (传输结束)
- 5: ENQ (询问)
- 6: ACK (确认)
- 7: BEL (响铃)
- 8: BS (退格)
- 9: TAB (水平制表符)
- 10: LF (换行)
- 11: VT (垂直制表符)
- 12: FF (换页)
- 13: CR (回车)
- 14: SO (换码)
- 15: SI (移入)
- 16-31: 其他控制字符
- 127: DEL (删除)
1.1.1 iscntrl函数的使用
我们已经初步了解了这个函数,那么这个函数是如何使用的呢?
iscntrl
函数的原型在 <ctype.h>
头文件中定义,其用法如下:
#include <ctype.h>int iscntrl(int c);
//参数: c 是要检查的字符(通常是一个 int 类型的值,表示字符的 ASCII 码)。
返回值: 如果 c 是控制字符,返回一个非零值(通常是 1);否则返回 0。
#include <stdio.h>
#include <ctype.h>//使用iscntrl函数需要包含的头文件int main() {char ch1 = '\n'; // 换行符char ch2 = 'A'; // 字母 Aif (iscntrl(ch1)) {printf("'%c' 是控制字符。\n", ch1);} else {printf("'%c' 不是控制字符。\n", ch1);}if (iscntrl(ch2)) {printf("'%c' 是控制字符。\n", ch2);} else {printf("'%c' 不是控制字符。\n", ch2);}return 0;
}
这个示例我们来判断一下 换行符‘\n’ 和字母 ‘A’ 是否为控制字符
可以看出iscntrl函数可以帮助你判断一个字符是否是控制字符,特别是在处理文本数据和控制字符的时候大大提升了程序员的代码效率。
1.2 isspace函数
大家对于这个函数可以这么记忆 is space(空白),拆分为两部分,space联想到这是空白字符
isspace
是 C 语言标准库中的一个函数,用于检查一个字符是否是空白字符。空白字符通常包括空格、制表符、换行符等,这些字符在文本中用于分隔单词或格式化文本,但不显示为可见字符。
1.2.1 空白字符的种类
在 C 语言中,
isspace
函数通常会识别以下几种空白字符:
- 空格字符
' '
(ASCII 32)- 水平制表符
'\t'
(ASCII 9)- 垂直制表符
'\v'
(ASCII 11)- 换行符
'\n'
(ASCII 10)- 回车符
'\r'
(ASCII 13)- 换页符
'\f'
(ASCII 12)
1.2.2 isspace函数的使用
#include <ctype.h>int isspace(int c);
//参数: c 是要检查的字符(通常是一个 int 类型的值,表示字符的 ASCII 码)。
//返回值: 如果 c 是空白字符,返回一个非零值(通常是 1);否则返回 0。
#include <stdio.h>
#include <ctype.h>int main() {char ch1 = ' '; // 空格char ch2 = '\n'; // 换行符char ch3 = 'A'; // 字母 Aif (isspace(ch1)) {printf("'%c' 是空白字符。\n", ch1);} else {printf("'%c' 不是空白字符。\n", ch1);}if (isspace(ch2)) {printf("'%c' 是空白字符。\n", ch2);} else {printf("'%c' 不是空白字符。\n", ch2);}if (isspace(ch3)) {printf("'%c' 是空白字符。\n", ch3);} else {printf("'%c' 不是空白字符。\n", ch3);}return 0;
}
按照第一个示例进行调整,在这个示例2中,我们再示例1中的代码再加上isspace函数所判断的空格就可以清晰的了解isspace函数的作用
这次判断空格‘ ’,换行符‘\n’,字母‘A’是否为空白字符
1.3 islower函数
和 isupper函数
islower
和 isupper
是 C 语言标准库中的两个函数,用于检查字符的大小写。它们的功能相对,通常可以一起理解。以下是对这两个函数的详细说明:
islower函数用于判断字符内是否有小写
isupper函数用于判断字符内是否有大写
int islower(int c)int isupper(int c)//参数: c 是要检查的字符(通常是一个 int 类型的值,表示字符的 ASCII 码)。
返回值: 如果 c 是小写字母(’a’ 到 'z’),返回一个非零值(通常是 1);否则返回 0。
#include <stdio.h>
#include <ctype.h>int main() {char ch1 = 'a'; // 小写字母char ch2 = 'Z'; // 大写字母char ch3 = '1'; // 数字char ch4 = 'b'; // 小写字母char ch5 = 'C'; // 大写字母if (islower(ch1)) {printf("'%c' 是小写字母。\n", ch1);} else {printf("'%c' 不是小写字母。\n", ch1);}if (isupper(ch2)) {printf("'%c' 是大写字母。\n", ch2);} else {printf("'%c' 不是大写字母。\n", ch2);}if (islower(ch3)) {printf("'%c' 是小写字母。\n", ch3);} else {printf("'%c' 不是小写字母。\n", ch3);}if (isupper(ch4)) {printf("'%c' 是大写字母。\n", ch4);} else {printf("'%c' 不是大写字母。\n", ch4);}if (islower(ch5)) {printf("'%c' 是小写字母。\n", ch5);} else {printf("'%c' 不是小写字母。\n", ch5);}return 0;
}
但这个代码太长啦,我们该如何去优化一下呢?其实我们可以自己定义一个函数
#include <stdio.h>
#include <ctype.h>void checkCharacter(char ch) {if (islower(ch)) {printf("'%c' 是小写字母。\n", ch);} else if (isupper(ch)) {printf("'%c' 是大写字母。\n", ch);} else {printf("'%c' 不是字母。\n", ch);}
}int main() {char characters[] = {'a', 'Z', '1', 'b', 'C'};int numChars = sizeof(characters) / sizeof(characters[0]);for (int i = 0; i < numChars; i++) {checkCharacter(characters[i]);}return 0;
}
int main()
: 主函数的入口点。char characters[] = {'a', 'Z', '1', 'b', 'C'};
: 定义一个字符数组characters
,包含要检查的字符。int numChars = sizeof(characters) / sizeof(characters[0]);
: 计算数组中字符的数量。sizeof(characters)
返回整个数组的字节大小,sizeof(characters[0])
返回单个字符的字节大小。两者相除得到数组的元素个数。for (int i = 0; i < numChars; i++)
: 使用for
循环遍历字符数组。
checkCharacter(characters[i]);
: 调用checkCharacter
函数,传入当前字符进行检查。return 0;
: 返回 0,表示程序正常结束。
笔者列出的字符分类函数的具体实现和以上所详细介绍的差不多,大家可以下来自己尝试一下
二、字符转换函数
2.1 tolower和toupper
c语言中提供了两个字符转换函数:
int tolower ( int c ); ———将参数传进去的大写字母转小写
int toupper ( int c ); ———将参数传进去的小写字母转大写
2.2 tolower和toupper的具体实现
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;
}
#include <stdio.h>
: 引入标准输入输出库,以便使用putchar
函数。#include <ctype.h>
: 引入字符处理库,以便使用islower
和toupper
函数。int main()
: 主函数,程序的入口点。int i = 0;
: 初始化一个整数变量i
,用于索引字符串str
。char str[] = "Test String.\n";
: 定义一个字符数组str
,并初始化为 "Test String.",后面跟着一个换行符\n
。char c;
: 定义一个字符变量c
,用于存储当前处理的字符。while (str[i])
: 开始一个循环,条件是str[i]
不为\0
(字符串结束符)。这意味着只要i
指向的字符不是字符串的结束,就继续循环。c = str[i];
: 将当前字符赋值给c
。if (islower(c))
: 检查c
是否是小写字母。如果是,执行下面的语句。c = toupper(c);
: 将小写字母c
转换为大写字母。putchar(c);
: 输出当前字符c
到标准输出。i++;
: 将i
增加 1,以便处理下一个字符。return 0;
: 返回 0,表示程序正常结束。
完