我有一个想要拆分的字符串,因此我使用 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 的其他解决方案
最佳答案
您可以使用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
序列中。
关于c++ - 使用 boost::split 分割带有多个分隔符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53653975/