# 陣列與字串
## 9/22 社課
---
先簡單複習上禮拜的內容
----
### while
```cpp=
while(執行條件){
只要滿足執行條件就會執行
執行完後會返回判斷是否符合執行條件
}
```
直到小括號中為 $false$ 前會一直執行
----
### do-while
```cpp=
do{
先執行一次
執行完後判斷是否符合執行條件
若符合則返回再執行一次
} while(執行條件);
```
----
### for
```cpp=
for(初始化; 執行條件; 執行完後的變更){
只要滿足執行條件就會執行
執行完後會返回判斷是否符合執行條件
}
```
第一個區塊:在迴圈開始前做的一些事
第二個區塊:執行迴圈的條件
第三個區塊:每執行完一次後做的事
----
### break
可以跳出迴圈
### continue
可以跳過這次迴圈
----
break
```cpp=
int a=0;
while(a<10){
a++;
if(a==6) break;
cout << a << ' ';
}
```
```cpp
1 2 3 4 5
```
continue
```cpp=
int a=0;
while(a<10){
a++;
if(a==6) continue;
cout << a << ' ';
}
```
```cpp
1 2 3 4 5 7 8 9 10
```
---
輸入一個數字 $n$
並輸入一串長度為 $n$ 的數列
請將這個數列倒過來輸出
----
$n=10^5$ ?
開 $10^5$ 個變數?
----
## 陣列
一排格子
每個格子都可以存一個相同型態東西
----
### 陣列宣告
```cpp=
int a[100];
char b[48763];
string c[114514];
```
----
### 陣列初始化
```cpp=
int a[5]={1, 2, 3, 4, 5};
int b[100]={};
```
----
### 取值
```cpp=
int a[3]={1, 2, 3};
cout << a[1];
```
```cpp
2
```
程式當中陣列都是 0-base 的
也就是說陣列中的第一個位置是"第 0 項"
----
### 賦值
```cpp=
int a[3]={1, 2, 3};
a[0]=7; // {7, 2, 3}
a[1]=1; // {7, 1, 3}
```
----
### 遍歷
```cpp=
int arr[N];
for(int i=0; i<N; i++){
cout << arr[i] << ' ';
}
```
---
## 二維陣列
----
一維陣列:一排變數
二維陣列:一排一維陣列
$n$ 維陣列:一排 $(n-1)$ 維陣列
----
```cpp=
int a[5][5];
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
a[i][j]=i*j;
}
}
```
| $i$ \ $j$ |0|1|2|3|4|
|:-:|:-:|:-:|:-:|:-:|:-:|
|0|0|0|0|0|0|
|1|0|1|2|3|4|
|2|0|2|4|6|8|
|3|0|3|6|9|12|
|4|0|4|8|12|16|
----
$a[n][m]=n$ 個長度為 $m$ 的一維陣列
$=n\times m$ 的二維陣列
----
### 陣列初始化
```cpp=
int a[2][5]={{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
int b[10][10]={};
```
---
## 字串
----
字串?
字元陣列?
----
C++ 字串
要引入\<string>
```cpp=
string s="Hello";
```
C 字串
```cpp=
char s[6]="Hello";
```
----
和陣列一樣可以取值,為 0-base
```cpp=
string s="Hello";
cout << s[1];
```
```cpp
e
```
----
可使用 .size() 或 .length() 取得字串長度
```cpp=
string s="1234";
cout << s.size();
```
```cpp
4
```
----
### 字串運算
可以用自己和另一個字串相加
```cpp=
string s="A";
s+="B";
cout << s << '\n';
```
```cpp
AB
```
----
### 字串和整數的轉換
to_string()可以將整數轉為字串
```cpp=
int a=123;
string s=to_string(a);
for(int i=s.length()-1; i>=0; i--) cout << s[i];
```
```cpp
321
```
stoi()可以將字串轉為整數
```cpp=
string s="123";
int a=stoi(s);
cout << a+1;
```
```cpp
124
```
----
使用上述兩個
to_string() 和 stoi()
需要讓編譯器版本(標準)為 C++11 以上
----
點進 Settings $\to$ Compiler

----
勾選任意高於 C++11 的版本

{"description":"slides","contributors":"[{\"id\":\"1a0296c8-ce58-4742-acda-22c02ae81a74\",\"add\":2713,\"del\":154}]","title":"09/22 C++社課"}