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

C++ strcmp 比較 "HelloWorld" 與 "Hello World":空格 ASCII 碼小於字母導致後者較小

     編輯:程式設計綜合問答

現象

strcmp("HelloWorld", "Hello World"); // 返回 >0,即 "HelloWorld" > "Hello World"

困惑:"Hello World" 多一個空格,長度更長,為何反而「較小」?

原理:逐字符 ASCII 碼比較

  1. 前 5 字符 'H','e','l','l','o' 相同,繼續比較。
  2. 第 6 位:
    str1[5] = 'W' (ASCII 87)
    str2[5] = ' ' (空格,ASCII 32)
  3. 'W' (87) > ' ' (32),比較**立即結束**,返回正值 (表示 str1 > str2)。
  4. 後續字符 ('o','r','l','d') **完全不參與比較**。

strcmp 返回值約定

返回值含義
< 0str1 < str2 (按字典序)
== 0str1 == str2
> 0str1 > str2

關鍵認知

  • strcmp 不比較長度,只比較**首個不同字符的編碼值**。
  • 空格 (32) < 數字 (48-57) < 大寫字母 (65-90) < 小寫字母 (97-122)。
  • 若需「長度優先」比較,需自行實現:先比長度,再 strcmp。

驗證代碼

#include 
#include 
int main() {
    const char* a = "HelloWorld";
    const char* b = "Hello World";
    std::cout << "strcmp(a,b) = " << std::strcmp(a,b) << std::endl; // >0
    std::cout << "'W'=" << int('W') << " ' '=" << int(' ') << std::endl; // 87 32
    return 0;
}

避坑提示

  • 字符串比較**不是**直觀的「誰長誰大」或「誰像字典序誰大」,**嚴格按編碼值逐字符比較**。
  • 跨平台注意:char 有符號性實現定義,負值字符比較結果可能異常,建議轉 unsigned char 或用 std::string::compare。
  • C++ 推薦直接用 std::string 的 ==/compare(),避免 C 風格指針陷阱。

理解「首異字符決定大小」規則,瞬間解開 strcmp 看似反直覺的結果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved