鍍金池/ 問(wèn)答/Python  C++/ C++怎么按字符分割字符串,返回?cái)?shù)組

C++怎么按字符分割字符串,返回?cái)?shù)組

在python里有split函數(shù),比如res_list ="aanbbncc".split("n")
那么res_list就是["aa","bb","cc"]
那么用c++是怎么實(shí)現(xiàn)這樣的功能呢?有沒(méi)有簡(jiǎn)潔高效的,我自己寫(xiě)的太煩鎖了,感覺(jué)有點(diǎn)low,所以來(lái)求教各位大佬。
clipboard.png

回答
編輯回答
避風(fēng)港

1、通過(guò)stl實(shí)現(xiàn)

涉及到string類的兩個(gè)函數(shù)find和substr:

1、find函數(shù)
原型:size_t find ( const string& str, size_t pos = 0 ) const;
功能:查找子字符串第一次出現(xiàn)的位置。
參數(shù)說(shuō)明:str為子字符串,pos為初始查找位置。
返回值:找到的話返回第一次出現(xiàn)的位置,否則返回string::npos

2、substr函數(shù)
原型:string substr ( size_t pos = 0, size_t n = npos ) const;
功能:獲得子字符串。
參數(shù)說(shuō)明:pos為起始位置(默認(rèn)為0),n為結(jié)束位置(默認(rèn)為npos)
返回值:子字符串

2、通過(guò)使用strtok()函數(shù)實(shí)現(xiàn)

原型:char strtok(char str, const char *delim);
功能:分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串。
描述:strtok()用來(lái)將字符串分割成一個(gè)個(gè)片段。參數(shù)s指向欲分割的字符串,參數(shù)delim則為分割字符串,當(dāng)strtok()在參數(shù)s的字符串中發(fā)現(xiàn)到參數(shù)delim的分割字符時(shí) 則會(huì)將該字符改為0 字符。在第一次調(diào)用時(shí),strtok()必需給予參數(shù)s字符串,往后的調(diào)用則將參數(shù)s設(shè)置成NULL。每次調(diào)用成功則返回被分割出片段的指針。

2018年9月9日 02:15
編輯回答
朕略傻
#include <iostream>
#include <string>
#include <vector>
using namespace std;

vector<string> split(string a, string b){
    vector<string> result;
    std::string::size_type i = 0;
    std::string::size_type found = a.find(b);
    while (found != std::string::npos){
        result.push_back(a.substr(i, found - i));
        i = found + b.size();
        found = a.find(b, i);
    }
    result.push_back(a.substr(i, a.size() - i));
    return result;
}

int main()
{
    string a = "aa\nbb\ncc";
    vector<string> result = split(a, "\n");
    for(int i=0;i<result.size();i++)
        cout<<result[i]<<endl;
    return 0;
}

自己寫(xiě)個(gè)函數(shù)也不是很復(fù)雜啊,c++是靜態(tài)強(qiáng)類型語(yǔ)言,肯定沒(méi)有python動(dòng)態(tài)弱類型語(yǔ)言方便,但是優(yōu)點(diǎn)還是有的

2017年1月28日 15:59