C++如何切割String對象的方法
C++相較于Java,Python 并沒有提供的字符串分割的函數split,因此需要自己進行編寫。在實際的工作中這一功能會被經常使用,所以進行簡單的記錄一下。
核心函數
代碼實現的函數是調用String庫中的find函數和substr函數。
find函數
size_type find(const basic_string &str,size_type pos=0)
find函數完成最簡單的搜索,它查找參數指定的字符串(str),若找到返回一個String::size_type的值,用來表示匹配發(fā)生位置的下標。若未找到,則返回一個名為string::npos的static成員。C++標準庫將npos定義為一個const string ::size_type類型,并初始化值為-1。由于npos是一個unsigned類型,此初值意味著npos等于任何string最大的可能大小。
參數str,pos表示從pos位置中開始查找str
除了find 操作,string還支持以下的操作
- str.find(args) 查找str中args第一次出現的位置
- str.rfind(args) 查找str中args最后一次出現的位置
- str.find_first_of(args) 查找str中args中第一個字符第一次出現的位置
- str.find_last_of(args) 查找str中args中第一個字符最后一次出現的位置
- str.find_first_not_of(args) 查找str中args中第一個不在atgs中的字符
- str.find_last_not_of(args) 查找str中args中最后一個不在atgs中的字符
substr函數
string substr(size_type pos=0,size_type count=npos)
substr主要功能是復制字符串,要求從指定的位置pos開始,并具有指定的長度count。若未指定長度或者pos+count>源字符串的長度,則子字符串將延續(xù)到源字符串的結尾
數值轉換
由于本次樣例中需要將string類型轉換為int類型,我們簡單介紹以下常見的string的數值轉換
int轉換成string
int i=42; string s=to_string(i);
string 轉換成int
string str='42'; stoi(str);
輸入樣例
nums = [3,2,4], target = 6
輸出樣式
3 2 4
6
代碼實現
#include<iostream> #include<vector> #include<string> using namespace std; void spiltStr(string str,const string & split,vector<string>&strlist) { ? ? strlist.clear(); ? ? if(str=="") ? ? ? ? return; ? ? string strs=str+split; ? ? size_t pos=strs.find(split); ? ? int steps=split.size(); ? ? while(pos!=strs.npos) ? ? { ? ? ? ? //substr 復制字符串,起始位置,復制字符數目 ? ? ? ? string temp=strs.substr(0,pos); ? ? ? ? strlist.push_back(temp); ? ? ? ? strs=strs.substr(pos+steps,strs.size()); ? ? ? ? pos=strs.find(split); ? ? } } int main() { ? ? vector<int>num; ? ? vector<string>strlist; ? ? string inputStr; ? ? string tempStr; ? ? int target; ? ? getline(cin,inputStr); ? ? if(inputStr=="") ? ? { ? ? ? ? return 0; ? ? } ? ? //分割輸入的字符串 ? ? spiltStr(inputStr,"[",strlist); ? ? spiltStr(strlist[1],"]",strlist); ? ? spiltStr(strlist[0],",",strlist); ? ? //將vector<string>spiltStr的數值寫入vector<int>nums中 ? ? for(auto i:strlist) ? ? { ? ? ? ? num.push_back(stoi(i)); ? ? } ? ? spiltStr(inputStr,"=",strlist); ? ? // spiltStr(strlist.back(),"=",strlist); ? ? target=stoi(strlist.back()); ? ? for(auto i:num) ? ? { ? ? ? ? cout<<i<<" "; ? ? } ? ? cout<<endl; ? ? cout<<target<<endl; ? ?? }
例程演示
到此這篇關于C++如何切割String對象的方法的文章就介紹到這了,更多相關C++ 切割String對象內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
教你如何使用qt quick-PathView實現好看的home界面
pathView的使用類似與ListView,都需要模型(model)和代理(delegate),只不過pathView多了一個路徑(path)屬性,顧名思義路徑就是item滑動的路徑,下面給大家分享qt quick-PathView實現好看的home界面,一起看看吧2021-06-06C語言中fchdir()函數和rewinddir()函數的使用詳解
這篇文章主要介紹了C語言中fchdir()函數和rewinddir()函數的使用詳解,是C語言入門學習中的基礎知識,需要的朋友可以參考下2015-09-09