2

有没有一种好方法可以通过多个分隔符拆分字符串(在 C 或 C++ 中),同时将分隔符保留为拆分字符串的一部分?我发现这样做的唯一方法是使用正则表达式,我宁愿不必为了做到这一点而引入另一个库?(我将 STL 用于字符串,而不是使用 Boost)。

4

2 回答 2

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;
}
于 2013-07-04T18:48:27.527 回答
1

您可以使用前瞻来做到这一点。用表达式拆分:

(?=,)

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

因此,this,is,an,example变为:(this ,is ,an ,example即分隔符与它后面的术语一起使用)

否则,您将使用向后看(意思是(?<=,))来获得:this, is, an, example

于 2013-07-04T18:25:55.440 回答