在C ++中,我想要类似于:
但是,我想指定要分割的多个子字符串。例如,我想将字符串“fda + hifoolkjba4”的“+”,“foo”,“ba”拆分为“fda”,“hi”,“lkj”,“4”的向量。有什么建议?最好是在STL和Boost中(如果可以避免的话,我宁愿不要加入Qt框架或其他库)。
答案 0 :(得分:3)
我会使用正则表达式,来自<regex>
或<boost/regex.hpp>
;你需要的正则表达式就像(.*?)(\+|foo|ba)
(加上最终的标记)。
以下是使用Boost的简化示例:
std::string str(argv[1]);
boost::regex r("(.*?)(\\+|foo|ba)");
boost::sregex_iterator rt(str.begin(), str.end(), r), rend;
std::string final;
for ( ; rt != rend; ++rt)
{
std::cout << (*rt)[1] << std::endl;
final = rt->suffix();
}
std::cout << final << std::endl;
答案 1 :(得分:1)
我建议在boost中使用正则表达式支持。有关示例,请参阅here。
这是一个可以拆分字符串的示例代码:
#include <iostream>
#include <boost/regex.hpp>
using namespace std;
int main()
{
boost::regex re("(\\+|foo|ba)");
std::string s("fda+hifoolkjba4");
boost::sregex_token_iterator i(s.begin(), s.end(), re, -1);
boost::sregex_token_iterator j;
while (i != j) {
std::cout << *i++ << " ";
}
std::cout << std::endl;
return 0;
}