C++ 的 char 本質是小整數

在 C++ 裡,char 本質上是一個 8-bit 整數,儲存的是對應的 ASCII 碼。這一件事同時是解題的利器和最著名的語法陷阱。

利器:直接拿 char 做算術

解字串類 LeetCode 題目時極為好用:

char c = 'b';
int ascii_value = c;      // 98
 
// 技巧 1:算字母在 0~25 的相對索引(解題極為常見)
int index = 'c' - 'a';    // 99 - 97 = 2
 
// 技巧 2:字母直接位移
char next_char = 'a' + 1; // 得到 'b'

在 JS 裡做同一件事要呼叫 str.charCodeAt(0) - 97;C++ 直接拿 char 當數字加減即可。

陷阱:+ 有時是串接,有時是相加

std::string 重載了 +,行為和 JS 的字串串接很像:

string s = "cat";
 
s = s + 's';            // "cats"   ← string + char
s += 's';               // 更推薦:效率更高,原地追加
 
string tail = "dog";
string full = s + tail; // "catsdog" ← string + string

但兩個純 char 相加,C++ 會把它們當 ASCII 整數算加法,絕不會自動拼成字串:

char a = 'a';        // ASCII 97
char b = 'b';        // ASCII 98
auto result = a + b; // 195,型別是 int

JS 裡 'a' + 'b' 得到 'ab';C++ 裡得到整數 195。

口訣

  • 算式裡有 string 物件 → + 是文字串接
  • 算式裡只有純 char → + 是整數相加

把兩個 char 拼成 string 的正確寫法

char c1 = 'h';
char c2 = 'i';
 
string s = c1 + c2;   // ❌ 編譯錯誤:c1 + c2 是 int,string 沒有吃 int 的建構子
 
// ✅ 寫法 A:先給一個空字串再加(最直覺)
string s = "";
s += c1;
s += c2;              // "hi"
 
// ✅ 寫法 B:利用字串建構子(C++11 以上)
string s = {c1, c2};  // "hi"

型別本身的差異見 C++ 的 char 和 string 是兩個世界,引號不能混用。