語法書 / AA 競程語法書 上冊 / 第二單元 / 字元資料型態與跳脫字元

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 說「01000001char 看就是 '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)。