各位亲爱的读者,大家好!今天读者给大家带来的是C语言中字符、字符串大小的比较。
一.字符大小的比较
在C语言中,处理字符的本质是处理其对应的ASCII码值,那么比较两个字符的大小实际上就等于比较他们对应ASCII码值的大小,根据ASCII码表,常见字符有以下大小关系
数字字符<大写字母<小写字母<汉字字符
值得注意的是,汉字字符采用的是双字节编码,且每个字节的最高位均为1 。因此汉字字符肯定比一个字节的英文字符来的大。
二.字符串大小的比较
虽然本节题目是字符串大小的比较,但是在C语言中不存在字符串变量,只有字符串常量,在C语言中,用单引号来表示字符如‘C’,用英文双引号来表示字符串如"ABC123"。那么上面我们介绍了如何比较单个字符之间的大小,那么如何来比较字符串呢?
我们可以思考一下计算机是如何存储数据的,是不是在计算机内存中开辟一块空间,先输入的数据先存储在这块内存空间中,那么我们比较字符串的大小是不是就可以按照顺序,从首个字符开始逐个比较,碰到字符大的,所在字符串就大于另一个串
例如:字符串"abc"和字符串"abbsdfsfg"比较大小
乍一看,后面的字符串长度远大于前面的字符串,但是大小确实前面的大于后面的,因为当比较到第三个字符时,第一个串的字符是'c',第二个串的字符是'b','c'大于'b',所以前面的串大于后面的串。
三.关于字符常量与字符串常量的补充说明
1.关于有效字符的识别
例:请计算字符串常量“\ta\018bc”中有几个有效字符
共有六个有效字符,分别是:\t,a,\01,8,b,c;常见的错误是数成了七个字符将\01差分为了\0与1或者是数成了五个字符将\01和8组合成了\018。在昨天的学习中,我们可以得知反斜杠\是转义功能符,单根反斜杠不是有效字符,其后面必须跟上某字符或八进制数字或者十六进制数后才能算作一个有效字符。 转义字符'\0'称为零字符,不是有效字符,而数字8并不是八进制数,所以反斜杠就与01进行匹配,匹配为字符‘\01’。
2.关于字符串常量的有效长度和字节数问题
由上一部分可知,‘\0’称为零字符并不是有效字符,是用来表示字符串的结尾,也占存储空间
例:"abc"含有三个有效字符,但在系统中结尾还有个自动添加的零字符"\0",所以其占四个字节的存储空间
再举一个例子
例:字符串”ab\0c“的有效长度和占用的内存大小
我们可以编写一个程序来解答这个问题
#include
#include
int main()
{
printf("%d,",strlen("ab\0c"));
printf("%d",sizeof("ab\0c"));
return 0;
}
结果为:2,5
因为其有效字符只有‘a’,‘b’两个,‘\0’是结束符,有效字符到此为止,但是整个字符串依旧占据了五个字节的内存,除去本来的字符串还加上字符串末尾系统添加的一个零字符。
strlen()函数位于string.h头文件,是用来计算字符串的有效长度的函数。
四.今日总结
在今天的学习中,博主给大家带来了字符、字符串之间大小的比较以及对字符常量与字符串常量的补充说明。在明天的学习中,博主将会给大家带来的是变量与常量的相关内容。在这里感谢大家的关注与支持!欢迎在评论区分享属于你的看法与见解,博主看到后会第一时间回复!