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