各位看官们,大家好,上一回中咱们说的是字符串连接的例子,这一回咱们说的例子是:字符串比较。闲话休提,言归正转。让我们一起talk C栗子吧!
看官们,在C语言的标准库中为我们提供了字符串比较函数,我们只需要包含string.h头文件就可以使用字符串比较函数。这点和字符串连接函数一样,标准库为我们提供了两个字符串比较函数:strcmp和strncmp。接下来我们分别介绍它们的用法和使用时的注意事项。
1.. strcmp函数
- strcmp函数原型:int strcmp(const char *s1, const char *s2)
- strcmp函数用法:它对s1和s2指向的字符串进行比较,并且返回一个大于,等于或者小于零的整数.
- strcmp注意事项:它是按照字符串中每个字符的ASCII码值进行比较。比较的时候,如果s1指向的字符串大于s2指向的字符串,那么返回值为大于零的整数;如果s1指向的字符串等于s2指向的字符串,那么返回值为零;如果s1指向的字符串小于s2指向的字符串,那么返回值为小于零的整数;我们通过判断该函数返回值的与零的大小,就能知道参与比较的字符串大小。
我们举一个实际的例子来说明,在程序中定义如下字符串:
char *s1 = "abcd";
char *s2 = "abdc";
char *s3 = "ABCD";
char *s4 = "abc";
我们使用strcmp函数分别对这些字符串进行比较,比较的结果如下:
abcd < abdc |//c的ASII码值比d的大,所以有此结果
abcd > ABCD |//小写字母的ASII码值大,所以有此结果
abcd > abc |//s1的字符串数量大于s2,所以有此结果
abcd = abcd |//自己和自己比较,所以有此结果
大家从上面的结果中可以清楚地看到参与比较的字符串以及字符串比较的结果,我在每个结果后面添加了注释,方便大家理解strcmp的工作原理。
strcmp函数在比较的时候,会对字符串中的每个字符分别进行比较,直到遇到字符串的小尾巴为止。
有些时候,我们只需要比较字符串的部分前缀就可以,而不需要比较整个字符串,这样可以节省时间,提高效率。比如,想调查人们手机号属于移动还是联通时,只需要比较手机号的前三位数字就可以区分出来,剩下的八位数字就不需要比较了。
- 如果手机号中前三位数字是135,那么肯定是移动号。
- 如果手机号中前三位数字是186,那么肯定是联通号。
在这种情况下使用strcmp就显得不够高效了,不过大家不用担心,标准库还为我们提供了一个可以比较字符串中任意数量字符的函数:strncmp。接下来,我们一起看看该函数的使用方法和使用时的注意事项。
2.. strncmp函数
- strncmp函数原型:int strncmp(const char *s1, const char *s2,size_t n)
- strncmp函数用法:它对s1和s2指向的字符串进行比较,并且返回一个大于,等于或者小于零的整数.
- strncmp注意事项:在比较的时候,只比较字符串中的前n个字符。如果字符串中的字符数量小于n,那么会停止比较,也就是说小尾巴后面的内容是不参与比较的。该函数的返回结果和strcmp的返回结果完全相同,因为刚刚说过strcmp的返回结果,所以咱们就不多说了。
我们举一个实际的例子来说明,在程序中还是使用刚才定义的字符串,我们使用strncmp函数分别对这些字符串进行比较,比较的结果如下:
3 of abcd < abdc |//只比较前三个字符,c的ASII码值比d的大,所以有此结果
2 of abcd = abdc |//只比较前两个字符,它们的ASII码值相同,所以有此结果
2 of abcd > ABCD |//只比较前两个字符,小写字母的ASII码值大,所以有此结果
5 of abcd > abc |//只比较前五个字符,s1的字符串数量大于s2,所以有此结果
看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。
各位看官,关于字符串比较的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。