iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 9
1
Software Development

C++ 30天屠龍記系列 第 9

C++ 30天屠龍記(第9天): 基礎語法 - String

String

string 是一個保存 char 的序列容器,把字串的記憶體管理責任交由 string 負責而不是 programmer,減輕了 C 語言風格字串的麻煩,

使用前需要預先載入 #include 即可。

特色

  • 提供了大量的字串操作函式。
  • 可與 C 語言風格字串雙向轉換。
  • 與Vector 不少功能兼容。

###定義一個String

string str1("catapillar");
string str2 = "catapillar";
auto str3 = "catapillar"s;
auto str4("catapillar"s);
auto const_str1("catapillar"sv);
auto const_str2 = "catapillar"sv;
  • 選一個喜歡的方法就好
  • 最後兩行 sv 是constant string 的意思,不會變的string,活用這個有助加快運行速度

String 合併

String birthday = "Happy" + " " + "Birthday";
//輸出 Happy Birthday
String add1Element = "Hell"s + 'o';
//輸出Hello

存取一個字節

char alphabet = birthday[2];

大小

  • 注意:如果要獲得中文/日文字/emoji的正確長度,需要把size 除2
string animal = "catapillar";
animal.size();
//翻譯:獲得animal的長度

插入

string animal = "catapillar";
animal.insert(5,"****");
//翻譯:從第五個位置(其實是第六個字節啦)插入“****“

拼接

string reptile = "catapillar";
string mammal = "whale";
reptile.append(mammal,0,5);
//翻譯:從mammal中選取5個字節,在0位置(剛開始)插入到reptile中

Sub String

auto greet = "Hello Buddy"sv;
auto subString = greet.substr(0,5);
//從第0個位置摘取5個字元,就是 "Hello"
  • sv 是constant string 的意思,不會變的string,活用這個有助加快運行速度

尋找字元的index

auto greet = "Hello Buddy"sv;
auto index = greet.find_first_of("B");
cout << index << endl;
//輸出6

轉換string

string nums = "345.3423";
auto integer = std::stoi(nums);
//翻譯:從string 轉換成integer(整數), 輸出為345

auto doubles = std::stod(nums);
//翻譯:從string 轉換成double(也就是小數), 輸出為345

int number = 123432;
auto nums = std::to_string(number);
//翻譯:從integer 轉換成string, 輸出為"123432

尋找

string animal = "catapillar";
animal.find("pill",0);
//翻譯:從第0個位置(就是剛開始)尋找第一個pill

Vector 與String 概念整合

功能 Vector String
空宣告 vector<資料類型> vec; String a;
宣告 vector<資料類型> vec= {1,23,44}; auto greet = "Hello"s;
複製 vector1 = vector2 string1 = string2;
Slice slice = vector<int>(v1.begin(),v1.begin()+5) Slice = s1.substr(0,5);
調轉 reverse(v1.begin(),v1.end()); reverse(str.begin(),str.end());
總和 reduce(execution::par,vector.begin(),vector.end()); 不適用
呼叫變量/字元 auto i = v1[4]; auto c = str[4]

大概就是這樣了,有缺漏可以在留言區講啊·。

String的進階應用

  • Vector與String的for loop

還記得在第五天我講過一個像這樣子的loop嗎

for(auto& i:vector){
  cout << i <<endl;
}

這個Loop不僅僅可以輸出Vector內的變數,也可以對每個變數進行判斷,和更改,在string裏也可以這樣做,例如我想以,為基準split開一個string

vector<string> vec_str;
auto str = "Hello,Comma,time,";
auto slice = "";

//當發現comma時,把前面的slice放進vector中並清空
for(auto& c: str){
  if(c==',') {
    vec_str.emplace_back(slice);
    slice.clear();
  } else slice+=c;
}

//Print出所有Vector元素
for(auto& str:vec_str){
  cout<<vec_str<<endl;
}
//輸出
//Hello
//Comma
//time

上一篇
C++ 30天屠龍記(第8天): Vector 與他的兄弟(二):神級通用函數
下一篇
C++ 30天屠龍記(第10天): 指針的概念
系列文
C++ 30天屠龍記30

尚未有邦友留言

立即登入留言