2.4 字元資料型態與跳脫字元
¶char:存單一字元
char 型態用來存單一個字元(佔 1 位元組)。這裡說的「字元」包括:
- 大小寫英文字母:
'A'~'Z'、'a'~'z' - 數字字元:
'0'~'9'(注意'5'是「字元 5」,和數字5不一樣) - 少數常見符號:像
'+'、'?'、' '(空格)等 - 一些看不見、卻有功能的字元,最常見的就是換行——沒錯,換行本身也算一個字元(下一段〈跳脫字元〉就會用到)
字元一律用單引號 '…' 括住(例如 'A'),這和用雙引號的字串 "A" 是不同的東西。
#include <iostream>
using namespace std;
int main() {
char letter = 'A';
char digit = '5';
char space = ' ';
cout << "letter: " << letter << endl;
cout << "digit: " << digit << endl;
cout << "before" << space << "after" << endl;
return 0;
}
執行結果:
letter: A
digit: 5
before after
小補充:電腦內部其實是用一個數字編碼(叫 ASCII)來代表每個字元——這也是 2.1 說「
01000001當char看就是'A'」的原因。怎麼在字元和它的數字之間互相對應、運用,是下冊的內容,這裡先知道「每個字元背後都有一個數字」就好。
¶跳脫字元(Escape Sequence)
在字串 "…" 或字元 '…' 裡,有些字元不能直接打進去——有的是看不見的控制字元(例如換行、Tab),有的雖然打得出來、但在那個位置有特殊意義(例如在 "…" 裡再打一個 ",會被當成字串提早結束)。這些字元要改用反斜線 \ 開頭的跳脫序列來表示:
| 跳脫序列 | 含義 | 範例 |
|---|---|---|
\n |
換行 | cout << "Line 1\nLine 2"; |
\t |
制表符(4-8 空格) | cout << "Col1\tCol2"; |
\\ |
反斜線本身 | cout << "C:\\Users\\name"; |
\' |
單引號 | char c = '\''; |
\" |
雙引號 | cout << "He said: \"hi\""; |
#include <iostream>
using namespace std;
int main() {
cout << "Line 1\nLine 2" << endl;
cout << "Name\tAge\tScore" << endl;
cout << "Wang\t18\t85" << endl;
cout << "Path: C:\\Users\\test\\file.txt" << endl;
cout << "He said: \"escape sequences in action\"" << endl;
return 0;
}
執行結果:
Line 1
Line 2
Name Age Score
Wang 18 85
Path: C:\Users\test\file.txt
He said: "escape sequences in action"
¶動手試試看
下面這段文字裡有反斜線、雙引號、換行——這些字元直接打會出問題,正好拿來練跳脫字元(這也不是用空白排得出來的)。試著寫一支程式,原封不動輸出這兩行:
路徑是 C:\AA\hello.cpp
老師說:"記得加分號!"
提示:反斜線用 \\、雙引號用 \"、換行用 \n(或拆成兩個 cout)。