strcmp 是用来比较两个字符串的大小
那么怎样比较两个字符串呢?
从两个字符串都从第一个字符开始进行对比 如果第一个字符相等就比较下一个字符 如果不相同就找下一个字符进行比较 如果第二个字符串的第二个字符大于第二个的第二个字符 则第一个字符串大于第二个字符串 那么后面的字符就不用比较了 小于就相反 如果不理解就看看该函数的实现原理
运用strcmp
#include<stdio.h>
#include<assert.h>
int main()
{
char arr1[] = "abcd";
char arr2[] = "abc";
printf("%d \n", strcmp(arr1, arr2));
printf("%d \n", strcmp(arr2, arr1));
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/f742b5a83791570044c16c40e7778ca9.png)
vs上面对该函数的处理 大于(小于)返回1(-1)
int my_strcmp(const char* arr1, const char* arr2)
{
assert(arr1 && arr2);
while (*arr1++ == *arr2++)
{
if (*arr1 == '\0')
return 0;
}
if (*arr1 > *arr2)
{
return 1;
}
else
{
return -1;
}
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "acd";
printf("%d \n", my_strcmp(arr1, arr2));
printf("%d \n", my_strcmp(arr2, arr1));
printf("%d \n", my_strcmp(arr1, arr1));
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/376214db703b1e2386d64bc193861c3c.png)
该函数的官方定义是 大于(小于) 返回 大于0的数字(两个字符的ASCLL值的差值)小于就返回差值的负值
int my_strcmp(const char* arr1, const char* arr2)
{
assert(arr1 && arr2);
while (*arr1++ == *arr2++);
return *arr1 - *arr2;
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "acd";
printf("%d \n", my_strcmp(arr1, arr2));
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/135d78e326454f1636c13cd3779eaefc.png)
用问题留言访问~