首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言字串比較函數實現:strcmp 邏輯解析

     編輯:C 語言問答

函數功能:字典序比較兩字串

代碼:


int fun(char *a, char *b) {
    while (*a != '\0' && *b != '\0' && *a == *b) {
        a++; b++;
    }
    return (*a - *b);
}

執行邏輯逐步解析

  1. while 條件:兩字串未結束 且 當前字符相等
  2. 滿足則雙指針同步後移,繼續比較下一字符
  3. 循環結束三種情況:
    • 某字串結束 (*a=='\0' 或 *b=='\0'):長度不同但前綴相同
    • 字符不相等 (*a != *b):首個差異字符決定大小
  4. 返回 *a - *b:
      > 0 :a > b (字典序後)
      = 0 :a == b
      < 0 :a < b (字典序前)

範例追蹤

// a = "1234", b = "125"
i=0: '1'=='1' → a++,b++
i=1: '2'=='2' → a++,b++
i=2: '3'!='5' → 循環結束
return '3' - '5' = 51 - 53 = -2 (< 0)
結論: "1234" < "125" (字典序:'3' < '5')

標準庫 strcmp 對比


// 標準實現本質相同
int strcmp(const char *s1, const char *s2) {
    while (*s1 && (*s1 == *s2)) { s1++; s2++; }
    return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}

注意:標準庫轉為 unsigned char 再相減,避免 char 有符號溢出導致未定義行為。

應用場景

  • 字串排序 (qsort 配合比較函數)
  • 查找、去重、字典構建
  • 命令解析、協議處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved