strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

ANSI标准规定,返回值为正数,负数,0 。而确切数值是依赖不同的C实现的。

当两个字符串不相等时,C标准没有规定返回值会是1 或 -1,只规定了正数和负数

有些会把两个字符的ASCII码之差作为比较结果由函数值返回。但无论如何不能以此条依据作为程序中的流程逻辑。

外文名

strcmp

类别

库函数

功 能

比较字符串s1和s2

头文件

string.h

一般形式

strcmp(字符串1,字符串2)

语法

1 extern int strcmp(const char *s1,const char *s2);

说明

规则

当s1<s2时,返回为负数;

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

当s1>s2时,返回正数。

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

1."A"<"B" 2."A"<"AB" 3."Apple"<"Banana" 4."A"<"a" 5."compare"<"computer"

特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。

ANSI标准规定,返回值为正数,负数,0 。而确切数值是依赖不同的C实现的。

当两个字符串不相等时,C标准没有规定返回值会是1 或 -1,只规定了正数和负数。

有些会把两个字符的ASCII码之差作为比较结果由函数值返回。但无论如何不能以此条依据作为程序中的流程逻辑。

strcmp

代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

#include <string.h>

#include <memcopy.h>

#undef strcmp

int strcmp(p1,p2)

{

    const char *p1;    

    const char *p2;    

    register const unsignedchar *s1=(const unsignedchar*)p1;    

    register const unsignedchar *s2=(const unsignedchar*)p2;    

    unsigned reg_charc1,c2;

     do

    {

        c1=(unsigned char)*s1++;        

        c2=(unsigned char)*s2++;        

        if(c1=='')            

        returnc1-c2;    

     }

     while(c1==c2);    

        return c1-c2;        

}     

libc_hidden_builtin_def(strcmp)

//以上代码是K&R C规范的,ASCI C的在下面

 

/*strcmp function*/

#include <string.h> 

int(strap)(const char *sl,const char *s2)

{

    /*compare unsigned char sl[],s2[]*/

    for(;*sl==*s2;++sl,++s2)

        if(*sl=='')

            return(0);

    return((*(unsignedchar*)sl<*(unsignedchar*)s2)?-1:+1);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

strcmp另外的源代码如下:

 

int __cdecl 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);

}

1

2

3

4

5

6

7

8

9

10

还有一种模拟算法:

 

int strcmp(const char * src, const char * dst)

                                        //字典序比较两字符串大小

{

    int ret = 0 ;

    while(!(ret=*src-*dst)&&*dst)   //相等且没有结束

        ++src, ++dst;

    return( ret );

}

源码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

int strcmp(const char *str1,const char *str2)

{

    /*不可用while(*str1++==*str2++)来比较,当不相等时仍会执行一次++,

    return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/

    while(*str1 == *str2)

    {

                assert((str1 != NULL) && (str2 != NULL));                

        if(*str1 == '')

            return 0;        

        str1++;

        str2++;

    }

    return *str1 - *str2;

}

示例1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#include <stdio.h>

#include <string.h>

int main()

{

    char string[20];

    char str[3][20];

    int i;

    for(i=0;i<3;i++)

        gets(str[i]);

    if(strcmp(str[0],str[1])>0)

        strcpy(string,str[0]);

    else

        strcpy(string,str[1]);

    if(strcmp(str[2],string)>0)

        strcpy(string,str[2]);

    printf(" The largest string is%s ",string);

    return 0;

}

示例2

(TC中运行通过)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

//strcmp.c

#include <syslib.h>

#include <string.h>

intmain()

{

    char *s1="Hello,Programmers!";

    char *s2="Hello,programmers!";

    int r;

    clrscr();

    r = strcmp(s1,s2);

    if(!r)

        printf("s1 and s2 are identical");

    else if(r<0)

        printf("s1 less than s2");

    else

        printf("s1 greater than s2");

    getchar();

    return 0;

}

应用示例

strcmp:进行二进制安全字符串比较

示例:

1

2

3

4

5

6

7

8

9

10

11

<?php

        $var1="Hello";

        $var2="Hello";

          

         if(strcmp($var1,$var2)==0)

         {echo'相等';

         }

        else     {

                echo'不相等';

        }

 ?>

strcasecmp:二进制安全比较字符串(不区分大小写)

1 int strcasecmp(string$str1,string$str2)

str1

第一个字符串。

str2

第二个字符串。

返回值: 如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

示例 :

1

2

3

4

5

6

7

<?php

 $var1="Hello";

 $var2="hello";

 if(strcasecmp($var1,$var2)==0){

 echo'$var1isequalto$var2inacase-insensitivestringcomparison';

 }

?>