C语言中strcmp和strncmp函数介绍及模拟实现

目录

strcmp与strncmp函数介绍

strcmp函数模拟实现

strncmp函数模拟实现


strcmp与strncmp函数介绍

这两个字符函数的使用需包含头文件:
 

#include <string.h>

strcmp函数是C语言中的字符串比较函数,用于比较两个字符串的大小。其函数原型为:

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

该函数返回值为整型,表示两个字符串的大小关系。如果str1小于str2,则返回值小于0;如果str1等于str2,则返回值等于0;如果str1大于str2,则返回值大于0。

strncmp函数也是C语言中的字符串比较函数,与strcmp函数类似,不同之处在于可以指定比较的字符个数。其函数原型为:

int strncmp(const char *str1, const char *str2, size_t n);

该函数的第三个参数n表示要比较的字符个数。如果n小于等于0,则表示比较整个字符串。其他规则与strcmp函数相同。

例如,假设有两个字符串str1和str2:

char str1[] = "abc";
char str2[] = "abd";

则调用strcmp函数比较两个字符串的大小:

int result = strcmp(str1, str2);

result的值为-1,表示str1小于str2。如果调用strncmp函数比较两个字符串的前两个字符:

int result = strncmp(str1, str2, 2);

result的值为0,表示两个字符串的前两个字符相等。

strcmp函数模拟实现

实现步骤

1.在while循环中,让str1和str2中的字符比较,如果相等,两个字符指针往后走,比较下一对字符。

2.如果相等条件下,如果遇到了'\0',字符串比较结束,两个字符串相等,返回0。

3.如果没有返回0,则字符串不相等,将不相等的两个字符作差比较大小,返回差值*str1-*str2,

若*str1>*str2,*str1-*str2>0,返回大于0的数字;

若*str1<*str2,*str1-*str2<0,返回小于0的数字;

实现代码如下

int my_strcmp(const char* str1, const char* str2)
{
	//判空
	assert(str1 && str2);
	while (*str1 == *str2)//两个字符相等,指针往后走
	{
		//指针往后走之前,判断是否遇到字符串结束标志'\0'
        //否则指针一直往后走,造成越界访问
		if (*str1 == '\0')//两个字符串都为'\0'了,比较结束,两个字符串相等
			return 0;
		str1++;
		str2++;
	}
	//循环结束,字符串不相等
	return *str1 - *str2;//作差法比较字符串大小,返回两个字符ASCII码值的差值
}

测试代码及运行截图

strncmp函数模拟实现

strncmp比strcmp多了一个参数size_t n,限制了字符串比较的个数,只需要在strcmp函数模拟实现的代码上稍作修改即可。

int my_strncmp(const char* str1, const char* str2, size_t n)
{
	//判空
	assert(str1 && str2);

	//特殊情况n=0
	if (n == 0)
		return 0;//无字符比较,直接返回0

	while (*str1 == *str2 && --n)//在while循环判断条件中,每比较一对字符,就让比较对数n-1
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
    //n=0或两个字符不相等时,跳出循环
	return *str1 - *str2;
}

测试代码及运行截图

好了,以上就是所有strcmp和strncmp的函数介绍及模拟实现,在此感谢各位读者!

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值