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