C语言-str家族之strcmp

/*        PC上食用更佳哦!

        date:2022年7月6日11:06:30

*/

strcmp即string compare(应该是这样的)

用法想必大家都知道,比较字符串嘛,一般用来比较两个字符是否相等。

man一下看看,相信各位看客都能看的懂,我就不做这个翻译了,但是我觉得还是不够清晰。

 还是去内核代码里看看它的真面目,我直呼哇靠这也太清晰了()

int strcmp(const char *str1, const char *str2)
{
	const unsigned char *s1 = (const unsigned char *)str1;
	const unsigned char *s2 = (const unsigned char *)str2;
	int delta = 0;

	while (*s1 || *s2) {
		delta = *s1 - *s2;
		if (delta)
			return delta;
		s1++;
		s2++;
	}
	return 0;
}

原理:取两个字符串的值逐个比较,只有delta不为0时才返回,这里的delta = *s1 - *s2是ASCII值相减哦!

如下:

A,a,b,c在ASCII表中对应的十进制值分别是65,97,98,99

对照定义解释一下a和b的比较:刚开始,*s1 和 *s2都表示A,此时delta = *s1 - *s2 = 0,不返回

执行s1++; s2++;后,*s1 和 *s2分别表示c和a,此时delta = *s1 - *s2 = 99-97 = 2,返回2

其余的原理一样,结果如下图

#include <stdio.h>
#include <string.h>
void main(){
    char *a = "Ac";
    char *b = "Aa";
    char *c = "ba";
    char *d = "Ac";
    printf("strcmp(a, b) : %d\n", strcmp(a, b));
    printf("strcmp(a, c) : %d\n", strcmp(a, c));
    printf("strcmp(a, d) : %d\n", strcmp(a, d));
}

 因为只有两个字符串完全相等才返回0,所以一般strcmp的用法是

if( strcmp( str1 , str2 ) == 0 )

如果在VC++中和Linux下返回值不一样,可以参考一下这个链接-->strncmp最后的解释部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值