模拟实现strcmp

项目场景:

当我们想比较两个数的大小的时候,有时会被比数的类型所限制,因此会引入一个函数strcmp,今天我们就来用自己的写法来模拟实现一下


解决方案

我们这里先了解函数strcmp

(一)老规矩先了解函数的语法

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

可以看到其返回类型为int ,所传入的两个参数是要比的两个字符串的地址,进行对应字符串的比较,当str1<str2时,返回一个小于0的数;当str1>str2时,返回一个大于0的数,比如:下面一个简单的比较,返回值为1

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main() 
{
	char arr1[] = "abq";
	char arr2[] = "abcdef";
	int ret = strcmp(arr1, arr2);
	printf("%d\n", ret);

	return 0;
}

(二)模拟实现strcmp函数

now,进入正题

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);

	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main() 
{
	char arr1[] = "abq";
	char arr2[] = "abcdef";
	int ret = my_strcmp(arr1, arr2);
	printf("%d\n", ret);

	return 0;
}

我们这里创建一个函数my_strcmp同样传入要比的两个字符串的地址(同时用const做限制)

由于字符串的比较需一个字符一个字符的比所以用到了while循环,如果不相等就跳出循环,返回两个字符ASCLL码值作差,反之二者均加一再次进行比较。如果*str1等于*str2==\0,则直接返回0即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值