目录
1. strcmp函数详解
2. strcmp模拟实现
3. strncmp函数
3.1 特殊情况分析
1. strcmp函数详解
头文件<string.h>
返回值是int类型,函数是将str1与str2这两个数组进行比较,
若str1>str2返回大于0的值
若str1<str2返回小于0的值
若str1==str2返回0
在VS中大于时返回1,小于时返回-1,等于时返回0。实质是一样的。
演示
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = { "abcgdf" };
char arr2[20] = { "abcafdfdfdfd" };
int i = strcmp(arr1, arr2);
printf("%d\n", i);
return 0;
}
结果输出 1
我们来分析一下大于小于和等于是怎么评判的:
原理是一个一个字符向后进行比较,当比到不一样的字符时,看看谁的asscill码值大,以此来比较大小,后面的字符就不用比了。因此在上面的代码中比到g与a时就比出结果,g>a因此返回大于0的值返回了1.
我们来看看其他的特殊情况:
我们可以看到arr1与arr2是不同的但是在\0之前是相同的,strcmp比到\0就结束比较了,因此返回了0.
2. strcmp模拟实现
#include <assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2 != NULL);
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
//也可以这样写
//return *str1 - *str2;
if (*str1 > *str2)
return 1;
else
return -1;
}
我们来使用一下
可见我们模拟实现成功。
3. strncmp函数
该函数与strcmp相比多了一个参数num
num表示要进行比较的字符个数。
演示:
比较了前三个字符abc相等因此返回0.
3.1 特殊情况分析
我们再来看一下特殊情况:
虽然要比较9个字符但是arr1与arr2在第四个字符处都出现了\0,因此提前结束了返回了0.
我们再来看一种情况:
arr1提前找到了\0,但是arr2还没有结束,我们规定的字符是9因此还会向后比较arr1中的\0与arr2中的a进行比较,显然arr1<arr2,因此返回-1.
感谢观看,欢迎在评论区讨论。