Skip to content

字元、字串

字元

字元、數字轉換

字元和數字之間轉換是使用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)

字串是不能直接這樣比大小的
要使用strcmp

strcmp(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");
}