0
点赞
收藏
分享

微信扫一扫

strcmp函数的实现与解析


原型: extern int strcmp(const char *s1, const char *s2)

所在的头文件:string.h

功能比较字符串s1与s2


说明:


当s1<s2时,返回为负数 注意不是-1


当s1==s2时,返回值= 0


当s1>s2时,返回正数 注意不是1


即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:


"A"<"B" "a">"A" "computer">"compare"


特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。


在c++primer一书中写到


#include <iostream>
#include <string>
using namespace std;
int main()
{
string stro="jdfakdjfalkdjlkadasdasdasdasdasdasdasd";
string strt="fjaksldjflkadjflakjdlkfjaldkjf";
bool myStrcmp(const string &s1, const string &s2);
int i=myStrcmp(stro,strt);
cout<<i<<endl;
return 0;
}

bool myStrcmp(const string &s1, const string &s2)
{
return s1.size() < s2.size();
}




源码1:(这里返回的是0 1 -1)


int  strcmp(const char *s1, const char *s2)
{
int ret=0
assert((NULL!=str1)&&(NULL!=str2))
while(!(ret=*(unsigned char*)s1-*(unsigned char*)s2&&*s1))
{
s1++
s2++
}
if (ret>0) return 1;
else if (ret<0) return -1;
return 0;

}





源码2:


int strcmp(char *s1,char *s2)
{
int i=0;
while(*(s1+i)==*(s2+i))
if(*(s1+i++)=='0') return 0;
return (*(s1+i)-(*(s2+i)));//结果返回第一个不相同的字符ASCII的差值
}

源码3:


intstrcmp(constchar*str1,constchar*str2)
{
while(*str1==*str2)
{
if(*str1=='\0')
return0;
str1++;
str2++;
}
return*str1-*str2;
}




int strcmp(const char* str1, const char* str2)
{
while ((*str1) && (*str1 == *str2))
{
str1++;
str2++;
}


if (*(unsigned char*)str1 > *(unsigned char*)str2)
{
return 1;
}
else if (*(unsigned char*)str1 < *(unsigned char*)str2)
{
return -1;
}
else
{
return 0;
}
}



源码5:


int strcmp(const char *str1, const char *str2)
{
for ( ; *str1 == *str2; str1++, str2++)
{
if (*str1 == '\0')
return 0;
}

if (*(unsigned char*)str1 > *(unsigned char*)str2)
{
return 1;
}
else if (*(unsigned char*)str1 < *(unsigned char*)str2)
{
return -1;
}
//如果只返回正负的话可以用 return *(unsigned char*)str1 - *(unsigned char*)str2;
}



举报

相关推荐

0 条评论