當前位置:編程學習大全網 - 源碼下載 - 幫我寫壹個簡易的strcmp函數(C語言)。

幫我寫壹個簡易的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碼的差值。

  • 上一篇:如何找到心理學測量量表
  • 下一篇:安卓系統,什麽電子書閱讀器支持公式閱讀,表格閱讀,格式PDF,CHM,Doc?
  • copyright 2024編程學習大全網