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,型別是 intJS 裡 '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 是兩個世界,引號不能混用。