strcmp

strcmp

原型:extern int strcmp(const char *s1,const char * s2);所在頭文件:string.h。功能:比較字元串s1和s2。

一般形式:strcmp(字元串1,字元串2)

strcmp函數是string compare(字元串比較)的縮寫,用於比較兩個字元串並根據比較結果返回整數。基本形式為strcmp(str1,str2),若str1=str2,則返回零;若str1str2,則返回正數。

語法


strcmp
strcmp

說明


規則
當s1
當s1=s2時,返回值= 0
當s1>s2時,返回正數
即:兩個字元串自左向右逐個字元相比(按ASCII值大小相比較),直到出現不同的字元或遇'\0'為止。如:
"A"<"B" "a">"A" "computer">"compare"
特別注意:strcmp(const char *s1,const char * s2)這裡面只能比較字元串,即可用於比較兩個字元串常量,或比較數組和字元串常量,不能比較數字等其他形式的參數。
ANSI標準規定,返回值為正數,負數,0 。而確切數值是依賴不同的C實現的。
Return Value
Returns an integral value indicating the relationship between the strings:
return valueindicates
<0the first character that does not match has a lower value inptr1than inptr2
the contents of both strings are equal
>0the first character that does not match has a greater value inptr1than inptr2
一般來說,返回值會是:1 0 -1
有些會把兩個字元的ASCII碼之差作為比較結果由函數值返回。
一例實現代碼:
#include
#include
#undef strcmp
int strcmp (p1, p2)
const char *p1;
const char *p2;
{
register const unsigned char *s1 = (const unsigned char *) p1;
register const unsigned char *s2 = (const unsigned char *) p2;
unsigned reg_char c1, c2;
do{
c1 = (unsigned char) *s1++;
c2 = (unsigned char) *s2++;
if (c1 == '\0')
return c1 - c2;
}
while (c1 == c2);
return c1 - c2;
}
libc_hidden_builtin_def (strcmp)

代碼


#include 
#include 
#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=='\0')
returnc1-c2;
}
while(c1==c2);
return c1-c2;
}
libc_hidden_builtin_def(strcmp)
//以上代碼是K&R C規範的,ASCI C的在下面
 
#include  
int(strap)(const char *sl,const char *s2)
{
for(;*sl==*s2;++sl,++s2)
if(*sl=='\0')
return(0);
return((*(unsignedchar*)sl<*(unsignedchar*)s2)?-1:+1);
}
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);
}
還有一種模擬演演算法:
 
int strcmp(const char * src, const char * dst)
//字典序比較兩字元串大小
{
int ret = 0 ;
while(!(ret=*src-*dst)&&*dst) //相等且沒有結束
++src, ++dst;
return( ret );
}

函數源碼


int strcmp(const char *str1, const char *str2){ while (*str1==*str2) { if(*str1=='\0') return 0; str1++; str2++; } return *str1-*str2;}
應用舉例舉例1
(在VC6.0中運行通過)
1#include
2#include<, string ,h>
3void ,main()
4{
5char ,string[20]
6char ,str[3][20]
7int,i
8for(i=0,i<,3,i++)
9gets(str[i])
10if(strcmp(str[0],str[1])>,0)
11strcpy(string,str[0])
12else
13strcpy(string,str[1])
14if(strcmp(str[2],string)>,0)
15strcpy(string,str[2])
16printf(",\nThe,largest, string , is ,%s\n",string)
17}
舉例2
(TC中運行通過)
1// strcmp.c
2#include,<,syslib,h>
3#include,<, string ,h>
4int,main()
5{
6char ,*s1=", Hello ,Programmers!"
7char ,*s2=", Hello ,programmers!"
8int,r
9clrscr()
10r=strcmp(s1,s2)
11if(!r)
12printf(", s1 , and , s2 , are ,identical",)
13elseif(r<,0)
14printf(", s1 , less , than ,s2",)
15else
16printf(", s1 ,greater, than ,s2",)
17getchar()
18return ,0
19}
PHP
strcmp — 二進位安全字元串比較
說明:
intstrcmp( string$str1 , string$str2 )
注意該比較區分大小寫。
參數:
str1第一個字元串。
str2第二個字元串。
返回值:
如果str1小於str2,返回負數;如果str1大於str2,返回正數;二者相等則返回0。(相等時返回0)