繁体   English   中英

使用boost :: split分割带有多个定界符的字符串

[英]using boost::split to split strings with multiple delimiters

我有一个要分割的字符串,所以我正在使用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序列中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM