1. 程式人生 > 其它 >一次坑爹的字串切割經歷

一次坑爹的字串切割經歷

技術標籤:c++字串c++

今天有個需求需要吧"123_cxk.jpg"切割成兩個變數,一個123,一個cxk,本來是信手拈來的活,卻突然發現一個小問題直接卡死。

起初想法

int main()
{
	string img_filename = "123_cxk.jpg";
	string id = img_filename.substr(0, img_filename.rfind("_"));
	string name = img_filename.substr(img_filename.rfind("_"
)+1, img_filename.rfind(".")); cout << "id:"<<id<<"\nname:"<<name << endl; }

輸出結果發現不是那麼回事,name咋沒進行切割???rfind找到"_“的下標+1,然後找到”."的下標,使用substr進行下標切割,邏輯沒毛病啊,很通順啊,而且_的下標找到並切割了啊, . 咋沒反應??
在這裡插入圖片描述
百思不得其解,嘗試改版,可以獲取自己想要的了,但是為啥還沒搞清楚。

string img_filename =
"123_cxk.jpg"; string id = img_filename.substr(0, img_filename.rfind("_")); string name = img_filename.substr(img_filename.rfind("_")+1, img_filename.rfind(".")- img_filename.rfind("_")-1); cout << "id:"<<id<<"\nname:"
<<name << endl;

就在那一瞬起,突然想到substr引數好像是,起點,切割數量。。。。臥槽,頓時茅舍大開,說到底就是函式的作用都不清楚,弄得一臉灰。。

string img_filename = "123_cxk.jpg";
string id = img_filename.substr(0, img_filename.rfind("_"));
string name = img_filename.substr(img_filename.rfind("_")+1,3);
cout << "id:"<<id<<"\nname:"<<name << endl;

在這裡插入圖片描述
分享出來是因為感覺著實太坑爹了(來自菜鳥的哀嚎),不是在找bug,而是在自己給自己製造bug。