C++ C++;:使用多个分隔符拆分字符串并在结果中保留分隔符?

C++ C++;:使用多个分隔符拆分字符串并在结果中保留分隔符?,c++,c,string,stl,C++,C,String,Stl,有没有一种好方法可以通过多个分隔符分割字符串(在C或C++中),同时将分隔符作为分割字符串的一部分?我发现实现这一点的唯一方法是使用正则表达式,我不想为了实现这一点而引入另一个库?(我对字符串使用STL,而不是Boost)。您可以使用前瞻来实现这一点。使用表达式拆分: (?=,) 对于逗号分隔符,并添加(可能在字符类中:[…])要拆分的其他分隔符 所以,这个,是,一个,示例变成:这个,是,一个,示例(也就是说,定界符跟在它后面的词一起) 否则,您将使用lookback(意思是没有regexp的

有没有一种好方法可以通过多个分隔符分割字符串(在C或C++中),同时将分隔符作为分割字符串的一部分?我发现实现这一点的唯一方法是使用正则表达式,我不想为了实现这一点而引入另一个库?(我对字符串使用STL,而不是Boost)。

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

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

所以,
这个,是,一个,示例
变成:
这个
,是
,一个
,示例
(也就是说,定界符跟在它后面的词一起)


否则,您将使用lookback(意思是没有regexp的
(?),尽管我不确定它是快还是慢:

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;
}
向量拆分(字符串和字符串拆分)
{
矢量结果;
大小\u t pos=0,最后一个pos=0;
while((pos=stringToSplit.find_first_of(“;,|”,lastPos))!=string::npos)
{
结果。推回(stringToSplit.substr(lastPos,pos lastPos+1));
lastPos=pos+1;
}
结果:推回(stringToSplit.substr(lastPos));
返回结果;
}

您希望分隔符位于其前面或后面的术语中?(例如,CSV:
此,is,示例
变成
此,
是,
示例
,is
,an
,示例
?)接下来,虽然这并不重要,但我只需要能够重新组装它们。您可以使用find_first_of()和substr()实现这一点,但这不是一个调用。。。