今日報錯系列:函式 substr 擷取 string 中的一段
阿新 • • 發佈:2021-01-05
今日字串擷取的心得,分享一下。
今日報錯記錄:
分享一、擷取string某個’子字串’之後至結束
示例如題:
將字串:“aaa bbb ccc , I love CSDN !” 中字串 “ I ”之後的全部擷取。
【雖然示例這裡字串中只有 ‘I’ 一個字元,但道理不變】
#include <iostream>
using namespace std;
int main()
{
string str = "aaa bbb ccc , I love CSDN !" ;
int pos = str.find("I"); // 在字串str中找到字串 "I" 出現的位置
string str2 = str.substr(pos); // 在字串str中,從"I" 出現的位置開始擷取至結束
cout <<"擷取後的字串為:" << str2.c_str() << endl;
}
輸出:
擷取後的字串為:I love CSDN !
總結 : str.substr(pos);表示從pos位置開始,到字串最後一位擷取的字串
分享二、擷取string變數的某一段
示例如題:
在字串:“aaa bbb ccc , I love CSDN !” 中,從14位置往後擷取13個字元。
#include <iostream>
using namespace std;
int main()
{
string str = "aaa bbb ccc , I love CSDN !";
string str2 = str.substr(14,13); // 14表示要擷取的字串的開始的位置,13代表要擷取的字串的長度。
cout << "擷取後的字串為:" << str2.c_str() << endl;
}
輸出:
擷取後的字串為:I love CSDN !
總結 :str.substr(pos, n); pos表示要擷取的字串的開始的位置,n代表要擷取的字串的長度。
分享三、補充 c_str()
估計細心的同學發現了,在輸出string時,是這樣輸出的
str2.c_str()
為什麼給後面加了 .c_str 呢?
因為如果不加,會這樣報錯
錯誤 C2679 二進位制“<<”: 沒有找到接受“std::string”型別的右運算元的運算子(或沒有可接受的轉換)
原因是:是String型別沒有過載 << 符號
所以在輸出string的時候,通過呼叫c_str()方法,即可解決。
結束:
分享也是自己對問題再次加深理解的方式,可能不全面,但絕對有用,後面將不斷完善~