char字元
整數
整數包含char
, bool, short, unsinged short, int, unsinged int, long, unsinged long
char
char是正整數,雖然顯示是字元,但實際存放在記憶體位置的資料型態是整數。
char所對映的整數是顯示在瑩幕上的ASCII碼。https://zh.wikipedia.org/zh-tw/ASCII
若輸入單引號''包住的字元,編譯器會自動把單引號包住的字元轉成整數。
比如'a',記憶體位址存放的十進位值是97,二進制是01100001
整數型態 | 占用Byte數量 | 數值範圍 | 格式符 | 輸出格式 |
---|---|---|---|---|
char | 1 | 0~127 | %c | 字元 |
char | 1 | 0~127 | %d | 整數 |
字元變數設為數字。
程式碼
1
2
3
char c = 97;
printf("%d\n", c);
printf("%c\n", c);
第一行,直接給整數到c變數。
執行結果
97
a
印出char可用%c格式字串或%d格式字串
1
2
3
char c = 'a';
printf("%d\n", c);
printf("%c\n", c);
執行結果
97
a
int變數設為字元。
在c++中,可以直接給int變數賦值單引號''包住的字元
1
2
3
4
5
int main() {
int c1 = 'A';
cout << "c1=" << c1 << endl;
return 0;
}
執行結果
65
int轉型字元
想印出字元,就把int轉型成char
1
2
int c1 = 'A';
cout << "c1=" << (char)c1 << endl;
執行結果
A
字元運算
也可字元加整數做運算。
1
2
int c1 = 'A' + 2;
cout << "c1=" << (char)c1 << endl;
第一行,字元+2。
執行結果
c1=C
字元轉整數
參考https://zh.wikipedia.org/zh-tw/ASCII
字元 | ascii code |
---|---|
0 | 48 |
1 | 49 |
2 | 50 |
3 | 51 |
4 | 52 |
5 | 53 |
6 | 54 |
7 | 55 |
8 | 56 |
9 | 57 |
字元'0'的ascii code為48
字元'0'到'9'的ascii code - 48 = 整數0到9
舉個例子,'9'的ascii code是57,'0'的ascii code為48, 57 - 48 = 整數9
而char屬於整數,可以直接用字元相減,'9' - '0' = 9
字元'0'到'9'減'0',則會變成整數0-9。
1
2
3
4
int main() {
int num = '9' - '0';
cout << num << endl;
}
9
大小寫轉換
字元 | ascii code | 字元 | ascii code |
---|---|---|---|
a | 97 | A | 65 |
b | 98 | B | 66 |
c | 99 | C | 67 |
d | 100 | D | 68 |
e | 101 | E | 69 |
f | 102 | F | 70 |
從上表可以發現小寫的ascii code與大寫的ascii code中間的差距是32。
97 - 65 = 32
98 - 66 = 32
99 - 66 = 32
小寫轉大寫
1
2
char upper = 'a' - 32;
cout << upper << endl;
A
大寫轉小寫
1
2
char lower = 'A' + 32;
cout << lower << endl;
a
判斷字母區間
判斷0-9
1
2
char c = 'A';
if (c < '0' || c > '9') cout << "不是數字" << endl;
不是數字
判斷a-z
1
2
char c = 'A';
if (c < 'a' || c > 'z') cout << "不是小寫字母" << endl;
不是小寫字母
判斷A-Z
1
2
char c = 'a';
if (c < 'A' || c > 'Z') cout << "不是大寫字母" << endl;
不是大寫字母
跳脫字元
重要有以下幾種
Ascii碼 | 跳脫字元 | 描述 |
---|---|---|
0 | \0 | 空,字元變數可設定0 |
9 | \t | TAB鍵對齊 |
10 | \n | 換行 |
13 | \r | 移動到最前面 |
設定空字元
1
2
char c4 = 0;
cout << "c4=" << c4 << endl;
執行結果
c4=
關於斜線
因為"與'與\,被編譯器作為以下用途。
- "",把字串包起來。
- '',把字元包起來。
- \,換行\n
所以不能直接使用"與'與\,必須加上\“與\‘與\\
。
雙引號
1
2
3
char c2 = '"';
cout << "c2=" << c2 << endl;
cout << "我說,\"跑!\"" << endl;
第1行,當作字元的雙引號,前面不用加斜線'\"'
,直接寫雙引號就可以'"'
。
第3行,當作字串中的的雙引號,前面要加斜線。
執行結果
c2="
我說,"跑!"
單引號
1
2
3
char c3 = '\'';
cout << "c3=" << c3 << endl;
cout << "我說,'跑!'" << endl;
第1行,當作字元的單引號,前面要加斜線'\''
。
第3行,當作字串中的的單引號,前面不用加斜線。
執行結果
c3='
我說,'跑!'