# 字串

# 基礎用法

字串實例可以使用 [] 指定索引來存取相對應位置的字元,就有如字元陣列的操作一般

string str1;                 // 內容為空字串
string str2 = "sololearn";   // 內容為指定的字串常量

可使用 str.length () 或 str.size () 得知字串大小

#include <iostream>
using namespace std;
int main()
{
    string s="Hello World";
    
    cout<<s長度為<<s.size()<<endl;
    for(int i=0;i<s.size();i++)
        cout<<s[i];
    return 0;
}
輸出-->s長度為11
    -->Hello World

從字串上的數字,僅是字元。若直接進行運算,計算的依據將為 ASCII 碼,結果會錯誤
若需要進行運算,則必須先減去 '0' 才行

# 倍數判斷

倍數判斷是運用字串的最基本運用,從 1 到 13 的判別法是很基本的喔!!

# 1 的倍數

所有的數字 (除了 0) 都是 1 的倍數喔~

# 2 的倍數

個位數字為偶數 (含 0)

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        if((s[length-1]-'0')%2==0)
            cout<<s<<"是2的倍數\n";
        else
            cout<<s<<"不是2的倍數\n";
    }
    return 0;
}

# 3 的倍數

各個數字和為 3 的倍數

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        int tmp = 0;
        for(int i = 0;i<length;i++){
            tmp += s[i] - '0';
        }
        if(tmp%3==0)
            cout<<s<<"是3的倍數\n";
        else
            cout<<s<<"不是3的倍數\n";
    }
    return 0;
}

# 4 的倍數

末二位數為 4 的倍數

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        int last_two = (s[length-2]-'0')*10+s[length-1]-'0';
        if(last_two%4==0)
            cout<<s<<"是4的倍數\n";
        else
            cout<<s<<"不是4的倍數\n";
    }
    return 0;
}

# 5 的倍數

個位數字為 0 或 5

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        if(s[length-1]=='0'||s[length-1]=='5')
            cout<<s<<"是5的倍數\n";
        else
            cout<<s<<"不是5的倍數\n";
    }
    return 0;
}

# 6 的倍數

同時是 2 和 3 的倍數

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        bool is_two = false;
        if((s[length-1]-'0')%2==0)
            is_two = true;
//------------------------------------
        int tmp = 0;
        for(int i = 0;i<length;i++){
            tmp += s[i] - '0';
        }
        bool is_three = false;
        if(tmp%3==0)
            is_three = true;
//-------------------------------------
        if(is_two&&is_three)
            cout<<s<<"是6的倍數\n";
        else
            cout<<s<<"不是6的倍數\n";
    }
    return 0;
}

# 7 的倍數

由個數起每三位數字一節,各奇數節的和與偶數節的和相減,其差是 7 的倍數

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        int tmp_A = 0,tmp_B = 0;
        for(int i = 0;i<length;i+=6){
            int tmp = 0;
            for(int j = 3;j>0;j--)
                if(i+j<=length){
                    tmp = tmp * 10 + s[length-i-j]-'0';
                }
                tmp_A +=tmp;
        }
        cout<<tmp_A<<endl;
        for(int i = 3;i<length;i+=6){
            int tmp = 0;
            for(int j = 3;j>0;j--){
                if(i+j<=length){
                    tmp = tmp * 10 + s[length-i-j]-'0';
                }
            }
            tmp_B +=tmp;
        }
        cout<<tmp_B<<endl;
        int gap = abs(tmp_A-tmp_B);
        if(gap%7==0)
            cout<<s<<"是7的倍數\n";
        else
            cout<<s<<"不是7的倍數\n";
    }
    return 0;
}

# 8 的倍數

末三位數為 8 的倍數

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        int last_three = (s[length-3]-'0')*100+(s[length-2]-'0')*10+s[length-1]-'0';
        if(last_three%8==0)
            cout<<s<<"是8的倍數\n";
        else
            cout<<s<<"不是8的倍數\n";
    }
    return 0;
}

# 9 的倍數

各個數字和為 9 的倍數

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        int tmp = 0;
        for(int i = 0;i<length;i++){
            tmp += s[i] - '0';
        }
        if(tmp%9==0)
            cout<<s<<"是9的倍數\n";
        else
            cout<<s<<"不是9的倍數\n";
    }
    return 0;
}

# 10 的倍數

個位數字為 0

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        if(s[length-1]=='0')
            cout<<s<<"是10的倍數\n";
        else
            cout<<s<<"不是10的倍數\n";
    }
    return 0;
}

# 11 的倍數

奇數位數字和與偶數位數字和相差為 11 的倍數。

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        int tmp_A = 0;
        for(int i = 0;i<length;i+=2){
            tmp_A +=s[i]-'0';
        }
        int tmp_B = 0;
        for(int i = 1;i<length;i+=2){
            tmp_B +=s[i]-'0';
        }
        int gap = abs(tmp_A-tmp_B);
        if(gap%11==0)
            cout<<s<<"是11的倍數\n";
        else
            cout<<s<<"不是11的倍數\n";
    }
    return 0;
}

另一種寫法:

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        int tmp_A = 0,tmp_B = 0;
        for(int i = 0;i<length;i++){
            if(i%2==0)
                tmp_A +=s[i]-'0';
            else
                tmp_B +=s[i]-'0';
        }
        int gap = abs(tmp_A-tmp_B);
        if(gap%11==0)
            cout<<s<<"是11的倍數\n";
        else
            cout<<s<<"不是11的倍數\n";
    }
    return 0;
}

# 12 的倍數

同時是 3 和 4 的倍數

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
//------------------------------------
        int tmp = 0;
        for(int i = 0;i<length;i++){
            tmp += s[i] - '0';
        }
        bool is_three = false;
        if(tmp%3==0)
            is_three = true;
//-------------------------------------
       int last_two = (s[length-2]-'0')*10+s[length-1]-'0';
       bool is_four = false;
        if(last_two%4==0)
            is_four = true;
        if(is_three&&is_four)
            cout<<s<<"是12的倍數\n";
        else
            cout<<s<<"不是12的倍數\n";
    }
    return 0;
}

# 13 的倍數

由個數起每三位數字一節,各奇數節的和與偶數節的和相減,其差是 13 的倍數

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int length = s.size();
        int tmp_A = 0,tmp_B = 0;
        for(int i = 0;i<length;i+=6){
            int tmp = 0;
            for(int j = 3;j>0;j--){
                if(i+j<=length){
                    tmp = tmp * 10 + s[length-i-j]-'0';
                }
            }
            tmp_A +=tmp;
        }
        cout<<tmp_A<<endl;
        for(int i = 3;i<length;i+=6){
            int tmp = 0;
            for(int j = 3;j>0;j--){
                if(i+j<=length){
                    tmp = tmp * 10 + s[length-i-j]-'0';
                }
            }
            tmp_B +=tmp;
        }
        cout<<tmp_B<<endl;
        int gap = abs(tmp_A-tmp_B);
        if(gap%13==0)
            cout<<s<<"是13的倍數\n";
        else
            cout<<s<<"不是13的倍數\n";
    }
    return 0;
}

# stringstream

stringstream 是一個 C++ 底下的類別,專門拿來讀取字串並且處理,很多時候拿來做字串的切割,或者是 int 跟 string 類別之間的轉換。

# 基本用法

標頭檔:
此時的 stringstream 就像個橋樑,可以負責當中間轉換的部分。
stringstream 提供了 >> 與 << 運算子來讀取或寫入:
_ >> 代表寫入 stringstream 中,<< 代表從 stringstream 拿出

# int 轉成 string

#include <sstream>
using namespace std;
int main()
{
    stringstream s1;
    int number =1234;
    string output;// 要把 number 轉成字串型態的容器
    
    cout<<"number="<<number<<endl;// 顯示 number=1234;
    
    s1<<number; // 將以 int 宣告的 number 放入我們的 stringstream 中
    s1>>output;
    
    cout<<"output="<<output<<endl;// 顯示 output=1234;
}

值得注意的是我們兩行顯示都是 1234 但是他的資料型態卻已經不一樣了,第一個是 int 的型態,第二行則是 string 的型態。

# string 轉成 int

#include <sstream>
using namespace std;
int main()
{
    stringstream string_to_int;
    string s1="12345";
    int n1;
    string_to_int<<s1;
    // 也可以使用 string_to_int.str (s1);
    // 或者 s1=string_to_int.str ();
    
    string_to_int>>n1;
    cout<<"s1="<<s1<<endl;//s1=12345
    cout<<"n1="<<n1<<endl;//n1=12345
}

# 分割字串

#include <sstream>
#include <iostream>
using namespace std;
int main()
{
    stringstream s1;
    int i1;// 用來存放 string 轉成 int 的資料
    string line;// 讀入每行的資料
    getline(cin,line);// 讀入整行的資料
    int sum=0;// 計算總和
    s1.clear();// 清除緩存
    s1<<line; // 也可以使用 s1.str (line);
    // 還可以寫成 line=s1.str ();
    while(s1>>i1)
        sum+=i1;// 把每個轉換成 int 的數字都丟入 sum 累加
    cout<<sum<<endl;
    return 0;
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay