# Array
## 陣列
---
## 想想看
如果今天我要輸入全班同學的成績,我該怎麼做?
宣告40個變數去存這些成績嗎?
``` C++
int Ash, Bimo, Blaze, Dusk, Tommy, XiaoMing ....;
cin>>Ash>>Bimp>>Blaze>>Dusk>>Tommy>>XiaoMing ....;
```
----
## 當然不要
也許40個變數你願意打完<br>但如果變成全年級的呢?<br>600多個我打死也不要
這時候就有種叫陣列的東西可以幫忙偷懶了
----
## 陣列是什麼
你可以把它想成是一列火車<br>每列火車都只能放一種資料型態,而每節車廂都可以放一個元素。

----
## 語法
跟其他變數一樣要先宣告<br>
``` C++
int train[5];
```
這代表宣告了一個長度為5的陣列<br>
但宣告卻沒給值這樣會出問題
----
### 如何給值
你可以<br>
```C++
int train[5]={0,1,2,3,4};
```
- 一次給完<br>
```C++
int train[]={0,1,2,3,4};
```
- 一次給完也可以不用給長度<br>
```C++
int train[5]={0,1,2};
```
- 只給部分,後面的數會自動為0
----
```C++
int train[5];
train[0]=0;
train[1]=1;
train[2]=2;
train[3]=3;
train[4]=4;
```
- 或是利用索引值一個一個給
```C++
int train[5];
for(int i=0;i<5;i++){
cin>>train[i];
}
```
- 或用迴圈給
----
### 字元陣列給值
字元陣列會稍微特殊一點點<br>
```C++
char train[5]={"t","r","a","i","n"};
```
- 會多一個""去夾住所要給的值<br>
```C++
char train[]={"Our train"};
```
```C++
char train[]="Our train";
```
- 這兩個是一樣的,都用字串的方式給值<br>但字串給值會比一個一個給多佔一個 *"\0"* 的位置<br>
----
### 注意
- 陣列的索引值是從0開始<br>所以如果長度為5,索引值就會是0~4
- 宣告時,n代表的是長度<br>
```C++
int train[n];
```
- 賦值時,m代表的是索引值
```C++
train[m]=x;
```
---
# problem 50 用陣列試試看
----
## 解答
```C++
#include<iostream>
using namespace std;
int main(){
int y;
cin>>y;
char a[]="The Beater hasn't born.";
char b[]="c8763!!!";
char c[]="WatermelonDurianChicken!!! R.I.P. c8763.";
if(y<2008) cout<<a;
else if(y>2017) cout<<c;
else cout<<b;
return 0;
}
```
----
# problem 22
----
## 解答
```C++
#include<iostream>
using namespace std;
int main(){
int tower[101];
int n;
tower[74]=10, tower[75]=11;
while(cin>>n){
for(int i=76;i<=n;i++){
tower[i]=tower[i-1]+tower[i-2];
}
cout<<tower[n]<<endl;
}
return 0;
}
```
---
## 二維陣列
----
### 二維陣列是什麼
剛才學的一維陣列像火車<br>
二維陣列則跟一維陣列差不多只是像表格<br>
----
```C++
int array[3][3];
```
|[0][0]|[0][1]|[0][2]|
|------|------|------|
|[1][0]|[1][1]|[1][2]|
|[2][0]|[2][1]|[2][2]|
----
## 賦值
跟一維陣列一樣<br>
```C++
int array[3][3]={{0,1,2},{4,5,6},{7,8,9}};
```
0 1 2<br>
4 5 6<br>
7 8 9<br>
---
# String
## 字串
----
## string 是什麼
string 是C++標準模板函式庫(STL)提供的一項功能<br>
跟字元陣列很像,是以字元作為元素儲存的容器<br>
可以不用宣告長度,直接賦值
----
## string 語法
- 使用前要先引用
- 接著宣告,再直接賦值就好了
```C++
#include<iostream>
#include<string>
using namespace std;
int main(){
string a = "hello world";
cout<<a<<endl;
return 0;
}
```
---
# problem 68
----
## 解答
```C++
#include<iostream>
#include<string>
using namespace std;
int main(){
string name;
cin>>name;
cout<<"www"<<name<<"安安"<<endl;
return 0;
}
```
----
# problem 126
----
### 解答
```C++
#include<iostream>
#include<string>
using namespace std;
int main(){
int id[9];
int tmp, a, b, c;
string id_num;
cin>>id_num;
for(int i=0;i<9;i++){
id[i]=id_num[i]-'0';
}
a=id[6], b=id[7], c=id[8];
for(int i=0;i<8;i++){
for(int j=i+1;j<9;j++){
if(id[i]>id[j]){
tmp=id[i];
id[i]=id[j];
id[j]=tmp;
}
}
}
if(id[8]*id[8]+id[7]*id[7]==100*a+10*b+c) cout<<"OK";
else cout<<"SPY!";
return 0;
}
```
{"metaMigratedAt":"2023-06-16T11:43:59.338Z","metaMigratedFrom":"Content","title":"Array","breaks":true,"contributors":"[{\"id\":\"a5d0b47b-82f6-43ab-9222-b35a124e6a73\",\"add\":3420,\"del\":189}]"}