C语言基础之strcmp()和strncmp()

1. strcmp函数
    函数原型:
int strcmp (const char *cs,const char *ct)
{
     unsigned char c1, c2;
     while(1)
     {
         c1=*cs++;
         c2=*ct++;
         if(c1 != c2)
             return c1 < c2 ? -1 : 1;
         if(!c1)
             break;
     }
     return 0;
}

功能:比较两个字符串

参数:@cs    比较的源字符串
          @ct    比较的目的字符串
返回值:相等,返回0
             cs比ct小,返回-1
             cs比ct大,返回1

缺点:没有检查传入的参数是否为空,引入临时变量

改进的strcmp函数
int strcmp (const char *cs,const char *ct)
{
    assert(cs);
    assert(ct);
    while(1)
    {
        if(*cs != *ct)
            return *cs < *ct ? -1 : 1;
        if( !(*cs) )
            break;
        cs++;
        ct++;
    }
    return 0;
}

注意:加入assert函数需要包含assert.h这个头文件


2. strncmp函数

    函数原型:
 int strncmp(const char *cs, const char *ct, size_t count)
 {
     unsigned char c1, c2;
     while(count)
     {
         c1=*c1++;
         c2=*c2++;
         if( c1 != c2 )
             return c1 < c2 ?  -1 : 1;
         if( !c1 )
             break;
         count--;
     }
     return 0;
 }
功能:比较两个字符串的前count位
参数:@cs            比较的源字符串
          @ct            比较的目的字符串
          @count      比较字符串的位数 
返回值:相等,返回0
             cs比ct小,返回-1
             cs比ct大,返回1

缺点:没有检查传入的参数是否为空,引入临时变量

改进的strncmp函数
int strncmp(const char *cs, const char *ct, size_t count)
{
     assert(cs);
     assert(ct);
     while(count)
     {
         if( *cs != *ct )
             return *cs < *ct ?  -1 : 1;
         if( !(*cs) )
             break;
         cs++;
         ct++;
         count--;
     }
     return 0;
}
注意:加入assert函数需要包含assert.h这个头文件

你可能感兴趣的:(C语言基础)