字元字串

甚麼是字元字串,可以吃嗎?

字元:是一個資訊單位。對使用字母系統音節文字自然

         語言,它大約對應為一個音位、類音位的單位。

         ex:'T' 'e' 'r' 'r' 'y' '吃' 這種都是字元(極品單字ID)

字串:是由零個或多個字元組成的有限序列。它是程式語言

         中表示文字資料型別

         ex:"可以吃嗎?"是由'可' '以' '吃' '嗎' '?'這些字元組成的(ID)

字元字串是一種資料型態

字串string

把它想像成烤肉串!

  • 這串烤肉串是由雞肉、青椒、彩椒組成的
  • 烤肉串[0]=雞肉!!!!!!!!
  • 烤肉串[1]=黃色彩椒 : (
  • 烤肉串[2]=青椒 :( ( ( (

有沒有覺得他跟一維陣列有點像,因為它也是陣列:字元陣列

0123456789

字元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

  1. vector 是 C++ 中最常用的動態陣列容器。
  2. 元素可自動擴張(不像一般陣列大小固定)

  3. 支援隨機存取

  4. 插入、刪除、搜尋都很方便

  5. 需要 #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)在數學與程式中核心概念相同,都是「大問題拆解成相似的相似小問題」以及「函數自身調用自身」 

兩者主要的區別在於:數學強調「定義」與「邏輯推理」,而程式設計強調「執行流程」與「終止條件」

  1. 終止條件 :必須有一個 if 判斷句,在滿足特定條件時跳出遞迴,否則會導致無窮∞遞迴。
  2. 遞迴關係式 :在函式內部呼叫自己,同時向「終止條件」的方向推進(縮小問題規模)。

函式呼叫函式

函式呼叫函式

#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(n1,k1)+C(n1,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;
}
Made with Slides.com