首先我们来看下strcmp函数的功能和用法:比较两个字符串。设这两个字符串为str1,str2,若str1等于str2,则返回零;若str1小于str2,则返回负数;若str1大于tr2,则返回正数。
那么下面我们就来看看具体怎么实现这个strcmp函数:
我们的基本思想是:先定义两个指针分别指向这两个字符串,然后当两个字符串都不为’\0’并且指针所指向的位置字符相等时,两个指针变量都向后移动,进行下一个字符的比较,依次循环。最后结果返回第一个字符串当前位置的值减去第二个字符串当前位置的值。如果循环结束,两个字符串完全相等,那么就返回0。如果走到中间某个字符,两个字符串不相等了,那么就返回这个位置两个字符串的差值。
下面是具体实现代码:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
/*如果字符串全部相等,那么循环结束两个字符串都到达'\0',相减为0,如果开始循环到中间发现某个位置的字符不一样,
那么就将该位置的两个字符ASCII值相减*/
while ( (*str1 == *str2) && (*str1 != '\0'))
{
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char* str1 = "ef";
char* str2 = "efa";
int ret = 0;
ret = my_strcmp(str1, str2);
printf("%d\n", ret);
system("pause");
return 0;
}
运行结果如下图: