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; }
本文出自 “magoYang” 博客,谢绝转载!
原文地址:http://10742272.blog.51cto.com/10732272/1766361