1. 程式人生 > 其它 >今日報錯系列:函式 substr 擷取 string 中的一段

今日報錯系列:函式 substr 擷取 string 中的一段

技術標籤:C++日常報錯stringc++

今日字串擷取的心得,分享一下。

今日報錯記錄:

分享一、擷取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()方法,即可解決。

結束:

分享也是自己對問題再次加深理解的方式,可能不全面,但絕對有用,後面將不斷完善~