自己写strcmp( )函数

来源:互联网 发布:ni80发热丝数据 编辑:程序博客网 时间:2024/06/05 22:59

网上搜到了一个库函数strcmp( )源代码:

int strcmp (const char * src, const char * dst){        int ret = 0 ;        while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)                ++src, ++dst;          if ( ret < 0 )                ret = -1 ;        else if ( ret > 0 )                ret = 1 ;        return( ret );}

我初步自己写的是:

int strcmp(char const *s1, char const *s2){int i = 0;while(1) {if(s1[i] == '\0' && s2[i] == '\0')return 0;else if(s1[i] > s2[i])return 1;else if(s1[i] < s2[i])return -1;i++;}} 

然后再精简一下是:

int strcmp(char const *s1, char const *s2){int ret, i = 0;while(1) {ret = s1[i] - s2[i];if(ret || !s1[i] || !s2[i])return ret;i++;}} 


继续精简:

int strcmp(char const *s1, char const *s2){int ret, i = 0;while(1) {ret = s1[i] - s2[i];if(ret || !s1[i])//只要字符串中有一个遇到\0,ret就不为零了 return ret;i++;}} 


但如果传入指针为NULL,则会崩溃,改进如下:

int strcmp(char const *s1, char const *s2){int ret, i = 0;if( !s1 || !s2)return s1 - s2;while(1) {ret = s1[i] - s2[i];if(ret || !s1[i])//只要字符串中有一个遇到\0,ret就不为零了 return ret;i++;}} 



欢迎大家评头论足