我有一个要分割的字符串,所以我正在使用boost::split
但是boost::is_any_of
接受一个字符串并将每个字符用作分隔符。
我的分隔符应为“->”和“:”
“:”有效,因为它是单个字符定界符,但“->”不起作用(它将每个字符(“-”和“>”分别作为定界符)
std::vector<std::string> strs;
boost::split(strs, line, boost::is_any_of(["->:"]));
如何定义多个分隔符,其中一些不止一个字符?
示例:
"0:c->2" should give [0,"c",2]
如果其他解决方案更容易解决特定问题,我愿意接受其他不使用boost的解决方案
答案 0 :(得分:0)
您可以使用Boost.Spirit解析字符串:
#include <string>
#include <vector>
#include <iostream>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main()
{
std::string str = "0:c->2";
std::vector< std::string > vec;
auto it = str.begin(), end = str.end();
bool res = qi::parse(it, end,
qi::as_string[ *(qi::char_ - ':' - "->") ] % (qi::lit(':') | qi::lit("->")),
vec);
std::cout << "Parsed:";
for (auto const& s : vec)
std::cout << " \"" << s << "\"";
std::cout << std::endl;
return 0;
}
在这里,解析器生成一个与*(qi::char_ - ':' - "->")
解析器匹配的字符串列表(解析为“除':'或“->”以外的任何数量的任何字符“),并由与(qi::lit(':') | qi::lit("->"))
解析器(读取为“':'字符或“->”字符串”)。第一个解析器必须排除分隔符,否则它们将包含在解析的字符串中。 qi::as_string
部分仅将解析的字符转换为std::string
属性,然后将其附加到vec
序列中。