编写函数,模拟实现strcmp
需要注意两点:
- 不受限制的字符串函数都是以’\0’为结尾标记来判断的,因此输入参数必须包含‘\0’
- strcmp不会修改参数值,传参时要加上const修饰
程序代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//减法运算判断
int MyStrcmp1(const char *src, const char *dest)
{
assert(NULL != dest && NULL != src);
int ret = 0;
while (!(ret = *(unsigned char *)src - *(unsigned char *)dest) && *dest)
{
src++;
dest++;
}
if (ret < 0)
{
ret = -1;
}
else if (ret > 0)
{
ret = 1;
}
return ret;
}
//比较运算判断
int MyStrcmp2(const char* dest, const char* src)
{
assert(NULL != dest && NULL != src);
while ((*dest) && (*src == *dest))
{
*dest++;
*src++;
}
if (*(unsigned char*)dest > *(unsigned char*)src)
return 1;
else if (*(unsigned char*)dest < *(unsigned char*)src)
return -1;
else
return 0;
}
int main()
{
char str1[8] = "hehao";
char str2[6] = "hello";
printf("%d\n", MyStrcmp1(str1, str2));
printf("%d\n", MyStrcmp1("hello", "hello"));
printf("%d\n", MyStrcmp1("he", "hello"));
printf("%d\n\n", MyStrcmp1("hello", "he"));
printf("%d\n", MyStrcmp2(str1, str2));
printf("%d\n", MyStrcmp2("hello", "hello"));
printf("%d\n", MyStrcmp2("he", "hello"));
printf("%d\n", MyStrcmp2("hello", "he"));
system("pause");
return 0;
}
程序运行结果如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL6lEVNd3ZU9Uds1GZsRnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4gjM4UTM1ITM3ITMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)