字元、字串
字元
字元、數字轉換
字元和數字之間轉換是使用ASCII
也可以說「ASCII」記錄了字元與字串轉換的對應關係
ASCII對照表
| 十進位 | 符號 | 描述 |
|---|---|---|
| 0 | NUL | Null (空字元) |
| 1 | SOH | Start of Heading |
| 2 | STX | Start of Text |
| 3 | ETX | End of Text |
| 4 | EOT | End of Transmission |
| 5 | ENQ | Enquiry |
| 6 | ACK | Acknowledgment |
| 7 | BEL | Bell |
| 8 | BS | Backspace |
| 9 | TAB | Horizontal Tab |
| 10 | LF | Line Feed |
| 11 | VT | Vertical Tab |
| 12 | FF | Form Feed |
| 13 | CR | Carriage Return |
| 14 | SO | Shift Out |
| 15 | SI | Shift In |
| 16 | DLE | Data Link Escape |
| 17 | DC1 | Device Control 1 |
| 18 | DC2 | Device Control 2 |
| 19 | DC3 | Device Control 3 |
| 20 | DC4 | Device Control 4 |
| 21 | NAK | Negative Acknowledgment |
| 22 | SYN | Synchronous Idle |
| 23 | ETB | End of Transmission Block |
| 24 | CAN | Cancel |
| 25 | EM | End of Medium |
| 26 | SUB | Substitute |
| 27 | ESC | Escape |
| 28 | FS | File Separator |
| 29 | GS | Group Separator |
| 30 | RS | Record Separator |
| 31 | US | Unit Separator |
| 32 | (space) | 空白 |
| 33 | ! | 驚嘆號 |
| 34 | " | 雙引號 |
| 35 | # | 井字號 |
| 36 | $ | 美元符號 |
| 37 | % | 百分比符號 |
| 38 | & | 和符號 |
| 39 | ' | 單引號 |
| 40 | ( | 左括號 |
| 41 | ) | 右括號 |
| 42 | * | 星號 |
| 43 | + | 加號 |
| 44 | , | 逗號 |
| 45 | - | 減號 |
| 46 | . | 點號 |
| 47 | / | 斜線 |
| 48 | 0 | 數字 0 |
| 49 | 1 | 數字 1 |
| 50 | 2 | 數字 2 |
| 51 | 3 | 數字 3 |
| 52 | 4 | 數字 4 |
| 53 | 5 | 數字 5 |
| 54 | 6 | 數字 6 |
| 55 | 7 | 數字 7 |
| 56 | 8 | 數字 8 |
| 57 | 9 | 數字 9 |
| 58 | : | 冒號 |
| 59 | ; | 分號 |
| 60 | < | 小於號 |
| 61 | = | 等號 |
| 62 | > | 大於號 |
| 63 | ? | 問號 |
| 64 | @ | At 符號 |
| 65 | A | 字母 A |
| 66 | B | 字母 B |
| 67 | C | 字母 C |
| 68 | D | 字母 D |
| 69 | E | 字母 E |
| 70 | F | 字母 F |
| 71 | G | 字母 G |
| 72 | H | 字母 H |
| 73 | I | 字母 I |
| 74 | J | 字母 J |
| 75 | K | 字母 K |
| 76 | L | 字母 L |
| 77 | M | 字母 M |
| 78 | N | 字母 N |
| 79 | O | 字母 O |
| 80 | P | 字母 P |
| 81 | Q | 字母 Q |
| 82 | R | 字母 R |
| 83 | S | 字母 S |
| 84 | T | 字母 T |
| 85 | U | 字母 U |
| 86 | V | 字母 V |
| 87 | W | 字母 W |
| 88 | X | 字母 X |
| 89 | Y | 字母 Y |
| 90 | Z | 字母 Z |
| 91 | [ | 左中括號 |
| 92 | \ | 反斜線 |
| 93 | ] | 右中括號 |
| 94 | ^ | 脫字符號 |
| 95 | _ | 底線 |
| 96 | ` | 重音符號 |
| 97 | a | 字母 a |
| 98 | b | 字母 b |
| 99 | c | 字母 c |
| 100 | d | 字母 d |
| 101 | e | 字母 e |
| 102 | f | 字母 f |
| 103 | g | 字母 g |
| 104 | h | 字母 h |
| 105 | i | 字母 i |
| 106 | j | 字母 j |
| 107 | k | 字母 k |
| 108 | l | 字母 l |
| 109 | m | 字母 m |
| 110 | n | 字母 n |
| 111 | o | 字母 o |
| 112 | p | 字母 p |
| 113 | q | 字母 q |
| 114 | r | 字母 r |
| 115 | s | 字母 s |
| 116 | t | 字母 t |
| 117 | u | 字母 u |
| 118 | v | 字母 v |
| 119 | w | 字母 w |
| 120 | x | 字母 x |
| 121 | y | 字母 y |
| 122 | z | 字母 z |
| 123 | { | 左大括號 |
| 124 | ||
| 125 | } | 右大括號 |
| 126 | ~ | 波浪號 |
| 127 | DEL | 刪除 |
運算時,程式會將char換成對應的ASCII,然後進行運算,運算結束以int回傳
假設程式為:
char a='A';
cout << a+1 ;
1.程式會把他先變成
char a='A';
cout << 'A'+1 ;
2.再變成
char a='A';
cout << 65+1 ;
3.再變成
char a='A';
cout << 66 ;
最後他會以 int 的資料型態輸出 66
如果想要輸出的是B,那就要再轉為char型態,可以用以下兩種方式
cout<< char(66) << "\n";
char c=66;
cout<< c ;
字串
宣告
Danger | 要記住
儲存n個字,要用n+1的空間
char v[] = {'h', 'e', 'l', 'l', 'o', '\0'};
長度為5,以
'\0'為終止字元
Danger | 要記住
長度為3的字串只能儲存兩個字!!!,如下
char s[3];
s[0]='1';
s[1]='2';
這樣
s[3]就是"\0"
輸入注意事項
#include<bits/stdc++.h>
using namespace std;
int main(){
char c[3]="";
cin>>c[0]>>c[1];
cout<<c;
}
這段程式碼在輸入時
輸入:「1 2」和「12」其實是一樣的,字串輸入中間不一定需要空格,因為一次只會拿一個字元。輸入:
1
2
輸出:
12輸入:
12
輸出:
12
\0為終止字元
#include<bits/stdc++.h>
using namespace std;
#define nn "\n"
int main(){
char v[] = {'h', 'e', 'l', 'l', 'o', '\0'};
cout<<v<<nn;
v[2]='\0';
cout<<v<<nn;
cout<<v[3]<<nn;
for(int i=0;i<5;i++){
cout<<v[i];
}
}
hello
he
l
helo
取字串長度(strlen)
#include<bits/stdc++.h>
using namespace std;
#define nn "\n"
int main(){
char v[] = {'h', 'e', 'l', 'l', 'o', '\0'};
cout<<strlen(v);
}
5
字串轉數字(atoi)
簡單來說,
atoi函式的名稱可以分解為以下部分:
- a: ASCII
- to: to
- i: integer
#include<bits/stdc++.h>
using namespace std;
#define nn "\n"
int main(){
char v[] = {'1','2','3','4','5', '\0'};
cout<<strlen(v)<<nn;
cout<<atoi(v);
}
5
12346
複製(strcpy)
看以下程式碼
char c[10]="123";
c="456";
雖然c會回傳"123",但是c不能直接透過
c="456";更改(像是數字陣列不能直接更改一樣)
要使用strcpy,如下strcpy(複製目的地,複製來源)
#include<bits/stdc++.h>
using namespace std;
int main(){
char c[10]="123",v[10]="456";
cout<<c<<endl;
strcpy(c,v);
cout<<c;
}
123
456
字串比大小(要使用strcmp)
char c[100]="AB" ,v[100]="Z";
cout<< (c>v)
字串是不能直接這樣比大小的
要使用strcmpstrcmp(A字串,B字串)
這是用來比大小的
如果A>B,回傳1
如果A<B,回傳-1
如果A=B,回傳0可以想像成:
大減小,回傳1(正):(2)-(1)>0
小減大,回傳-1(負):(-2)-(1)<
相等相減,回傳0:(2)-(2)=0
字元陣列輸入
文字二維陣列輸入不需要空格,因為一次只會取一個,自動分開。
#include<bits/stdc++.h>
using namespace std;
char c[10][10];
int main(){
istringstream cin("\
12345 \
54123 \
78945 \
14725 \
36985\
");
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cin>>c[i][j];
}
}
cout<<c[2];
}
78945
string、char的數字、字串轉換
#include <bits/stdc++.h>
using namespace std;
int toint(char c[11]){
if(c[0]=='-'){
int re=0;
for(int i=1;c[i]!='\0';i++){
re*=10;
re+=c[i]-'0';
}
return -re;
}
int re=0;
for(int i=0;c[i]!='\0';i++){
re*=10;
re+=c[i]-'0';
}
return re;
}
int main(){
char c[11]("1000");
cout<<c<<"\n";
cout<<atoi(c)-1<<"\n";
string s=c;
cout<<s<<"\n";
cout<<stoi(s)-1<<"\n";
cout<<to_string(1000)<<"\n";
cout<<toint(c)<<"\n";
cout<<toint("-1000");
}