【C语言指南】字符串处理函数(四)strcmp的介绍及模拟实现

举报
倔强的石头_ 发表于 2025/09/03 15:16:40 2025/09/03
【摘要】 strcmp()函数是 C 语言标准库中用于比较两个字符串的一个重要函数,全称为 "string compare"。它位于头文件中 strcmp()函数逐字符地比较两个字符串str1和str2,直到找到它们之间存在差异的字符,或者到达任一字符串的结束符\0。比较基于每个字符的 ASCII 值(对于宽字符字符串,对应的是宽字符集的排序规则)。

 一、strcmp函数介绍

strcmp() 函数是 C 语言标准库中用于比较两个字符串的一个重要函数,全称为 "string compare"。它位于 <string.h> 头文件

函数原型

int strcmp(const char *str1, const char *str2);

函数参数

  • const char *str1:指向第一个要比较的字符串的指针。
  • const char *str2:指向第二个要比较的字符串的指针。

功能描述

strcmp() 函数逐字符地比较两个字符串 str1 和 str2,直到找到它们之间存在差异的字符,或者到达任一字符串的结束符 \0比较基于每个字符的 ASCII 值(对于宽字符字符串,对应的是宽字符集的排序规则)。 

返回值

  • 如果 str1 和 str2 完全相同(包括结尾的 \0 字符),则返回 0 表示两者相等
  • 如果 str1 在字典顺序(ASCII值顺序)上小于 str2,则返回一个小于 0 的整数值
  • 如果 str1 在字典顺序上大于 str2,则返回一个大于 0 的整数值

使用示例

注意:逐个ASCII对比,即使数组2字符个数大于数组1,通过比较ASCII也会得出数组1大于数组2

55e4d560c4cddfa7eb738079ee507eb.png


二、strcmp函数模拟实现

思路

1.        进入函数先对两个指针进行断言,防止对野指针进行操作

2.        while循环,条件是指针1指向的内容与指针2指向的内容相等(相同),这时指针1和指针2都向后移动 ,直到指针1或者指针2走到了'\0',说明两个指针指向的内容完全相同,return 0(因为循环进入的条件是指针1和指针2相等,这表示指针1和指针2同时指向了'\0')

3.        如果代码段没有从while循环走到return语句,在其之后返回一个当前两个指针指向内容ASCII做差的值,这也正巧妙地满足了该函数的返回值要求


代码

#include<stdio.h>
#include<string.h>
#include<assert.h>
int strcmp1(const char* s1,const char* s2)
{
	assert(s1 != NULL && s2 != NULL);
	while (*s1 == *s2)
	{
		if (*s1 == '\0')
			return 0;
		s1++;
		s2++;
	}
	/*if (*s1 > *s2)
		return 1;
	else
		return -1;*/
	return *s1 - *s2;//优化后,直接返回当前两个指针指向内容ASCII做差的值
}
int main()
{
	char arr1[] = { "abcdef" };
	char arr2[] = { "abqef" };
	printf("%d\n", strcmp(arr1, arr2));
	printf("%d\n", strcmp1(arr1, arr2));
	return 0;
}

测试

8ab3077ffae6a7236df9f7d7e80777c.png

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。