字元字串
甚麼是字元字串,可以吃嗎?
字元字串是一種資料型態
字串string

把它想像成烤肉串!
- 這串烤肉串是由雞肉、青椒、彩椒組成的
- 烤肉串[0]=雞肉!!!!!!!!
- 烤肉串[1]=黃色彩椒 : (
- 烤肉串[2]=青椒 :( ( ( (
有沒有覺得他跟一維陣列有點像,因為它也是陣列:字元陣列
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
| 雞 | 彩 | 青 | 雞 | 彩 | 彩 | 雞 | 彩 | 青 | 雞 |
字元char
把它想像成烤肉串上的食材!
雞

青椒、彩椒

當然,你可以DIY自己的烤肉串
+
+
+
=
+
轉換成烤肉串字元陣列
0
1
2
3
4
5
'\0'
'\0'表示字串結尾的特殊字符稱為”空字符”它的數值是 0
每個烤肉串最後都有一個籤子
在C++嘗試前,我們要
先導入函示庫!
#include<string>字符
char 變數名稱 = 字符
char ans = 'A' ;
char grade = 'b' ;-
全名:字符(Character)
-
功能:儲存任何一個 ASCII 字符
字串
string 變數名稱 = 字串
string name = "Terry" ;
string grade = "A++" ;-
全名:字元(String)
-
功能:儲存0~n個 ASCII 字符
#include<iostream>
#include<string>
using namespace std;
int main(){
string ans;
char a='1',b='2',c='3';
ans=a+b+c;
return 0;}試試看
當題目給你未知長度的字串
可以用length() || size()知道字串長度🤓👆
#include <iostream>
#include <string>
using namespace std;
int main() {
string a = "hello";
cout << a.length(); //5
cout << a.size(); //5
return 0;}#include<iostream>
#include<string>
using namespace std;
int main(){
string a;
cin>>a;
for(int i=0;i<a.size();i++){
cout<<a[i];
}
cout<<endl;
for(int i=0;i<a.length();i++){
cout<<a[i];
}
cout<<endl;
for(int i=0;a[i]!='\0';i++){
cout<<a[i];
}
return 0;}
作字元陣列
由此可延伸
#include<iostream>
#include<string>
using namespace std;
int main(){
string a;
cin>>a;
for(int i=0;i<a.size();i++){
cout<<a[i]<<"Happy";
}
return 0;}
其他同理自己照題目推,不懂得來問
a069
提示:可以用字元陣列將字串拆成一個個去計算有幾個a、b、c
a114
練習
ASCII碼
📌 為什麼需要 ASCII?
電腦沒辦法直接存「字」,所以必須用 數字編號 來代表。
就像是每個字符都有自己的座號,
ex:當我們叫10304,就知道在叫江O慈小朋友
叫04的後11號是叫10315的張O穎小朋友

不用特別背,電腦都記著
例如我們想知道某字元是英文大寫||小寫
char a;
cin>>a;
if ('A'<=a && a<='Z') cout<<a<<"是大寫";
else if('a'<=a && a<='z') cout<<a<<"是小寫";
else cout<<a<<"不是英文字母";原理是利用他的ASCII碼大小來判斷
題目
a.080
a.085
c.012
a.315凱 薩 密 碼
getline(cin,變數);用下面的程式碼讀取字串,這樣財部會被空格中斷輸入
vector
-
vector是 C++ 中最常用的動態陣列容器。 -
元素可自動擴張(不像一般陣列大小固定)
-
支援隨機存取
-
插入、刪除、搜尋都很方便
-
需要
#include <vector>
什麼是vector?
📌 如何宣告 vector?
vector<int> v;
vector<int> v(5);
// 大小 5,每個元素預設為 0
vector<int> v(5, 10);
// 大小 5,每個值都是 10
| 操作 | 函式 | 說明 |
| ------------|-------------| ---------------|
| 新增到尾端 | push_back(x)| 加在最後 |
| 移除尾端 | pop_back() | 刪除最後一個 |
| 判斷是否為空 | empty() | true/false |
| 清空所有元素 | clear() | 全刪除 |
| 插入 | insert() | 插入到某個位置 |
| 刪除 | erase() | 刪除某位置或某區間|今天會介紹這些函式
陣列名.函式(你要處理的元素);自訂義函式
放在主程式的外面
函式
-
有名字 – 方便呼叫(像叫某人名字一樣)。
-
有輸入(參數) – 你可以把資料交給函式處理。
-
有回傳值 – 處理完的結果可以交回給主程式(也可以不回傳)。
-
能重複使用 – 寫一次,可以呼叫多次。
可重複使用的程式區塊,它能執行特定的任務,並且可以把結果回傳給呼叫它的地方。
函式
程式碼可以重複使用
- 不用一段程式碼一直「複製貼上」。
讓程式更簡潔、可讀性更高
-
把複雜問題拆成多個小任務,每個小任務用一個函式處理。
-
看程式時,不需要深入看每行細節,只要看「這個函式叫什麼名字」就知道功能。
方便維護和修改
-
如果程式需要修改,只要改 函式內部的程式碼。
提高程式的結構化與模組化
-
函式讓你的程式像拼積木一樣,一塊一塊組成,容易管理。

結構
沒有參數沒有回傳值
void 函式名(){
//程式碼;
}結構
有參數沒有回傳值
void 函式名(宣告 變數;宣告 變數){
//程式碼;
}a176.
結構
有參數有回傳值
宣告 函式名(){ //根據要回傳的東西宣告資料型態
//程式碼;
return 變數;
}全域整數
宣告 變數;
int main(){
//主程式;
}a014,b037


遞迴
遞迴
數學上
遞迴式(Recurrence Relation)是一種定義數列的方式,其中每一項均由前一項或前若干項的函數形式定義,常見於數學與計算機科學。其核心思想是將複雜的大問題拆解為自相似的較小問題,並透過基礎項(Initial Condition)向上推導。

遞迴
遞迴式(Recursion)在數學與程式中核心概念相同,都是「大問題拆解成相似的相似小問題」以及「函數自身調用自身」。
兩者主要的區別在於:數學強調「定義」與「邏輯推理」,而程式設計強調「執行流程」與「終止條件」。
- 終止條件 :必須有一個
if判斷句,在滿足特定條件時跳出遞迴,否則會導致無窮∞遞迴。 - 遞迴關係式 :在函式內部呼叫自己,同時向「終止條件」的方向推進(縮小問題規模)。
函式呼叫函式
函式呼叫函式
#include<iostream>
using namespace std;
int mystery_function(int n){
if (n == 1){
return 1;}
else{
return mystery_function(n - 1)+mystery_funtion(n-2);}
}
int main(){
int n,a;
cin>>n>>a;
cout<<mystery_function(n)<<endl;
cout<<mystery_function(a);
return 0;}
-
第 1 層:1 個點
-
第 2 層:1 + 2 = 3 個點
-
第 3 層:1 + 2 + 3 = 6 個點
-
規律:第 n 層的點數就是前 n 個整數的和。
-
公式:Tn=n(n+1)/2
a224
#include <iostream> // 標頭檔要放最上面
using namespace std;
// 1. 計算「第 n 個三角形數」 (每一層的面積)
int T(int n) {
if (n == 1) return 1;
return T(n - 1) + n;
}
// 2. 計算「第 n 個四面體數」 (層數的累加)
int Te(int n) {
if (n == 1) return 1;
// 這裡會呼叫上面的 T(n),產生「遞迴」
return Te(n - 1) + T(n);
}
int main() {
int n;
cin >> n;
cout << Te(n) ;
return 0;
} def pascal(row, col):
# 基礎案例:如果是每一列的頭或尾,就回傳 1
if col == 0 or col == row:
return 1
else:
# 樹狀分岔:向上一列的兩個位置「討救兵」,再加起來
return pascal(row - 1, col - 1) + pascal(row - 1, col)
C(n,k)=C(n−1,k−1)+C(n−1,k)
Struct
Struct
struct是 C++ 用來「打包資料」最強大的基礎工具。
// 定義一個叫做 club 的結構
struct club {
// 這些是成員變數
string name; // 名字
int num; // 座號
string class; // 班級
}; // <=== 注意!這裡一定要有分號 ;使用 Struct 的寫法 (打包管理)就像將一堆散亂的資料打包整理好
// 方法 A:逐一填寫 (最清楚)
club s1; // 產生一個社員變數 s1
s1.name = "江沛慈"; // 用「點 (.)」來存取裡面的欄位
s1.num = 4;
s1.class = "Ren";
// 方法 B:快速初始化 (類似填表單,順序要對)
club s2 = { "劉姿瑩", 27, "Ren" };
cout<<s2.num;//27
return 0;
}

字串&自訂意函式
By gg dd
字串&自訂意函式
- 12