本文目錄一覽:
求c語言實現strcmp功能的自編程序
#include stdio.h
int main()
{
int strcmp(char * p1,char * p2);
char * s1 = “hello world”;
char s2[] = “hello_world”;
char s3[] = “hello world”;
if(strcmp(s1,s2)==0){
printf(“String s1 and s2 are equal!\n”);
}
else{
printf(“String s1 and s2 are not equal!\n”);
}
if(strcmp(s1,s3)==0){
printf(“String s1 and s3 are equal!\n”);
}
else{
printf(“String s1 and s3 are not equal!\n”);
}
getchar();
return 0;
}
//自己編寫的一個比較字符串的函數
int strcmp(char * p1,char * p2)
{
for(;;)
{
if(*p1==’\0′ *p2==’\0′){
return 0;
}
if(*p1!=*p2){
return (*p1 – *p2);
}
p1++;
p2++;
}
}
幫我寫一個簡易的strcmp函數(C語言)。
① c的strcmp簡潔實現可以是這樣的:
int strcmp(const char* s1, const char* s2)
{
while(*s1 (*s1==*s2))
s1++,s2++;
return *(const unsigned char*)s1-*(const unsigned char*)s2;
}
② strcmp的返回值可以有3種,即0, =0, 0 (任意一個數值),代表的含義分別是: str1 strcmp用的是二進制比較,意思是按字典順序,比如: 字母a 字母 b;而a A。 (這是因為a的ascii碼是97,而A的是65)。
理解了這個,上面的代碼就好理解了。 while就是s1,s2從頭到位一個一個字符的比較。如果s1為空,或者s1不等於s2,則中斷循環 (s1不為空,s2為空,則是*s1 != *s2,退出循環)。返回值是循環中斷時的字符(分別s1和s2對應的位置,*s1-*s2, 如果是上面說的 ‘a’ – ‘A’, 那麼返回的就是97-65=32),那麼意味着a在A前面, strcmp 0。
之所以先轉換成const unsigned char*再作減法,是由於c的char有三種: char, signed char 和unsigned char。 char就是’a’這樣的, 而 signed char 則是-127~126之間的數值,而unsigned char則是0~255之間的一個值。 轉換成unsigned char就是要“確保” ‘a’ — 97。 你要不轉換,也是可以的。
說明一點,很多c的lib實現,比如gnu c, 都是把結果處理成: -1, 0, 1, 而不是這個字符對應的ascii碼的差值。
C語言strcmp函數是什麼樣的代碼
1、cmp
是
compare,比較的縮寫。
2、strcmp是c語言中頭文件string.h(字符串函數)中定義的一個用於對兩組字符串進行比較的函數,它的返回值是int類型。
假設有兩組字符串cs和ct,當csct時,函數返回一個負數;當cs==ct時,函數返回0;當csct時,函數返回一個正數。
即:兩個字符串自左向右逐個字符相比(按ascii值大小相比較),直到出現不同的字符或遇’\0’為止。如:”a””b”
,”a””a”
,”computer””compare”
,”comput””comp”
strcmp函數原型為:int
strcmp(const
char
*s1,const
char
*
s2);
C語言這段strcmp代碼是什麼意思
char a[20], b[20];
strcmp(a,b)是比較ab兩個字符串的大小
如果strcmp(a,b)==0,說明ab字符串相等
如果strcmp(a,b)0,說明a字符串大於b字符串,也就是a的字母順序應該在b後面
—-比如”abcd””aabc”, “bcde””abcd”
如果strcmp(a,b)0,說明a字符串小於b字符串,也就是a的字母順序應該在b前面
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/287320.html