栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言-str家族之strcmp

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言-str家族之strcmp

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 
#include 
void main(){
    char *a = "Ac";
    char *b = "Aa";
    char *c = "ba";
    char *d = "Ac";
    printf("strcmp(a, b) : %dn", strcmp(a, b));
    printf("strcmp(a, c) : %dn", strcmp(a, c));
    printf("strcmp(a, d) : %dn", strcmp(a, d));
}

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010186.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号