C ++:拆分带有多个分隔符的字符串并在结果中保留分隔符?

时间:2013-07-04 18:17:08

标签: c++ c string stl

是否有一种很好的方法可以将多个分隔符拆分字符串(在C或C ++中),同时将分隔符保留为拆分字符串的一部分?我发现这样做的唯一方法是使用正则表达式,而我宁愿不必拉另一个库来执行此操作? (我正在使用STL作为字符串,而不是使用Boost)。

2 个答案:

答案 0 :(得分:4)

没有正则表达式,但我不确定它是更快还是更慢:

vector<string> split(string& stringToSplit)
{
    vector<string> result;
    size_t pos = 0, lastPos = 0;
    while ((pos = stringToSplit.find_first_of(";,|", lastPos)) != string::npos)
    {
        result.push_back(stringToSplit.substr(lastPos, pos-lastPos+1));
        lastPos = pos+1;
    }
    result.push_back(stringToSplit.substr(lastPos));
    return result;
}

答案 1 :(得分:1)

你可以利用前瞻来做到这一点。用表达式分割:

(?=,)

对于逗号分隔符,并添加(可能在字符类中:[ ... ])要分割的其他分隔符。

因此,this,is,an,example变为:this ,is ,an ,example(即分隔符跟随其后的字词)

否则,您将使用lookbehind(意为(?<=,))来获取:this, is, an, example