# Char (字元) ###### tags: `程式設計` 字元 (char) 在程式裡面是用來儲存字元的變數型態 | 變數型態 | 儲存資料 | | :----: |:----:| | char | `'A'`、`'+'`、`'#'`、`'s'`、`'!'`. . . . ....| ## ASC-II 字元根據ASC-II編碼,從0~127共128個,每一個字元都對應到不同的號碼 | 整數編碼 | 字元 | | :----: |:----:| | 65 | 'A' | | 66 | 'B' | | 67 | 'C' | | 97 | 'a' | | 98 | 'b' | 維基百科網址:<https://zh.wikipedia.org/wiki/ASCII> ## 控制字元 **字元可分為控制字元和可顯示字元。** 控制字元(編號 0~31、127,共33個)顧名思義就是有 <font size=5>**控制功能**</font>,沒有辦法顯示出來 | 整數編碼 | 控制字元 | 意義 | | :----: |:----:|:----:| | 0 | '\0' |空字元 (NULL)| | 9 | '\t' |定位字元 (TAB)| | 8 | '\b' |退格 (BACKSPACE)| - 當C++把這些整數解讀成字元輸出,就會執行該 **控制字元** 的功能 - 控制字元前面有一個反斜線`\`叫做跳脫符號 ## 可顯示字元 可顯示字元(編號 32~126,共95個),每一個會對應到 **一個半型字** | 整數編碼 | 字元 | | :----: |:----:| | 32 | ' ' | | 42 | '\*'| | 50 | '2' | | 97 | 'a' | # 程式 在C++裡面要宣告字元: ```cpp char text = 'x' ``` :::info 注意宣告 **字元** 是用 **單引號** ,宣告 **字串** 則是用 **雙引號** 。 ::: --- 如果你宣告的時候不只有輸入一個字元,像這樣: ```cpp #include <iostream> using namespace std; main() { char text = 'abc' cout<<text; } ``` <font size=5>**[output]**</font> ``` c ``` 則會取最後一個字元 --- ## 字元和整數的轉換 整數轉成字元: ```cpp (char)整數 ``` <font size = 4>範例:</font> ```cpp= #include <iostream> using namespace std; main() { int i ; for (i = 97;i<=122;i++) { cout<<i<<" "<<(char)i<<endl; } } ``` <font size =5>**[output]**</font> ``` 97 a 98 b 99 c 100 d 101 e 102 f 103 g ... ...... ``` --- 字元轉成整數: ```cpp (int)字元 ``` <font size = 4>範例:</font> ```cpp= #include <iostream> using namespace std; main() { cout<<(int)'\0'<<endl; cout<<(int)'\n'<<endl; cout<<(int)'A'<<endl; cout<<(int)'!'<<endl; } ``` <font size =5>**[output]**</font> ``` 0 10 65 33 ``` 例題: --- >[Zerojudge a009: 解碼器](https://zerojudge.tw/ShowProblem?problemid=a009 "游標顯示") > 這題是字元和字串的混合應用 由 ASCII 查表可知 K=-7 <font size =5>**[code]**</font> ```cpp= #include <iostream> #include <string> using namespace std; main() { string x; cin>>x; for(int i=0 ; i<x.length() ; i++) { char n = x[i]; n = n - 7; cout<<n; } } ```