###### tags: `FoShiShi`
# ASCII
## What
`ASCII`
全名`American Standard Code for Information Interchange`
中文名為美國標準資訊交換碼
是基於拉丁字母的一套電腦編碼系統
`ASCII`碼用了`0 ~ 127`個數字來儲存**大小寫英文字母,阿拉伯數字,...**
## When
在我們要去計算字元間的變換
例:
像在一個字串中把所有英文字母變成下一個(`A -> B`, `B -> C` ... `Z -> A`)
就**一定會用到`ASCII`來轉換字元**
## How
### ASCII表

:::info
看十進位對字符就可以了
十六進位不用看
:::
**第`0 ~ 31`跟`127`格的字元我們基本上不太會用到**
**剩下的就是真正會用到的部分**
我們會發現,`ASCII`很聰明的把連續的英文字母跟數字排在一起,這樣就**可以透過`ASCII`的加減實現英文字母的加減**
### 型態轉換
只要在一個字元的名稱**前面加上`(int)`就能夠將其轉為他的`ASCII`碼**
相反的,只要**在一個數字(`ASCII`表的範圍中)的名稱前面加上`(char)`就可以將其轉為字元**
例:
```cpp=
char chr = 'A';
cout << (int)chr << endl; // 65
int ascii = (int)(chr + 2);
cout << (char)ascii << endl; // C
```
## 實際應用
### 題目1
輸入一字串`str`
其中只包含大寫英文字母
將其每個字母變為下一個字母
(`A -> B`, `B -> C`, ... , `Z -> A`)
然後輸出
:::spoiler solution
可以依序把每個英文字母的`ASCII`減掉`41('A'的ASCII)`
這樣就會變成:
`A = 0, B = 1, ... , Z = 25`
這樣如果`Z`在`+1`後可以`% 26`變回`A`
```cpp=
#include<iostream>
using namespace std;
int main() {
string str;
cin >> str;
for(int i = 0; i < str.length(); i ++ ) {
int num = int(str[i]) - int('A');
num = (num + 1) % 26;
str[i] = char(int('A') + num);
}
cout << str << endl;
}
```