strcmp():字符串比较函数,
功能:C/C++函数,比较两个字符串,涉及对两个字符串对应的字符逐个比较,直到发现不匹配为止,先不匹配较小的就小,大的就大,如果一个字符串是另一个的前面的一部分,那也认为它小于另一个字符串,因为它的NULL出现的更早。设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1>str2,则返回正数;
若str1<str2,则返回负数。
原型: int strcmp( const char *str1,const char *str2)
返回值:原则上是0,正数和负数,不过有时候也是返回两个字符的ASCII值之差
注意:1)strcmp()函数比较的是两个字符串,例如数组,字符串常量等,不能比较数字等其他形式的 参数 ;
2)函数返回值是int型,而不是char*,两个字符串是常量形式加const;
3)在这里str1,str2不用断言,因为两个字符串有可能是空,但一般不这么写,用时判断下,否则 没什么太大的意义;
My code :
#include <stdio.h>
int my_strcmp(const char* str1,const char* str2)
{
const char *s1 = str1;
const char *s2 = str2;
while (*s1||*s2 ) //判断空
{
if (*s2 == '\0' || *s1 > *s2)
{
return 1;
}
else if (*s1 == '\0' || *s1 < *s2)
{
return -1;
}
else
{
return 0;
}
s1++;
s2++;
}
return 0; // 是在两个字符串都为空时返回值 0
}
源码:
int strcmp(const char *str1,const char *str2)
{
/*不可用while(*str1++==*str2++)来比较,当不相等时仍会执行一次++,
return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/
while(*str1 == *str2)
{
if(*str1 == '\0')
return0;
str1++;
str2++;
}
return *str1 - *str2;
}
转载于:https://blog.51cto.com/10742272/1766361