2.4 字元資料型態與跳脫字元
¶char:存單一字元
char 型態用來存單一個字元(佔 1 位元組)。這裡說的「字元」包括:
- 大小寫英文字母:
'A'~'Z'、'a'~'z' - 數字字元:
'0'~'9'(注意'5'是「字元 5」,和數字5不一樣) - 常見標點與符號:像
'+'、'?'、' '(空格)等 - 一些看不見、卻有功能的字元,最常見的就是換行——沒錯,換行本身也算一個字元(下一段〈跳脫字元〉就會用到)
把上面「人類看得懂、能直接印出來」的常見 ASCII 字元全部加起來,其實只有 95 種:大小寫英文字母 52 種、數字 10 種、常見標點與符號 32 種,再加上空格 1 種。真的有形狀、看得到的圖案是 94 種;空格雖然看不見,但它也是一個可以印出來的字元。
寫字元時,用單引號,例如 'A'、'5'、'+';寫一段文字時,用雙引號,例如 "A"、"Hi"。注意:'A' 是一個 char;"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\""; |
¶\n 與 endl:兩種換行寫法
"\n" 是放在字串裡的換行字元;endl 則是接在 cout << 後面的換行工具。下面兩段寫法各自都會輸出兩行:
cout << "A\nB" << endl;
cout << "A" << endl;
cout << "B" << endl;
初學時用 endl 換行最直覺;如果要在同一個字串裡直接表示換行,就用 \n。
#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"
¶動手試試看
下面這段文字裡有反斜線、雙引號、換行——這些字元直接打會出問題,正好拿來練跳脫字元(這也不是用空白排得出來的)。試著寫一支程式,原封不動輸出這兩行:
Path: C:\AA\hello.cpp
Message: "Run sample first!"
提示:反斜線用 \\、雙引號用 \"、換行用 \n(或拆成兩個 cout)。