如何拆分字符串并使用boost :: split保留分隔符?

时间:2014-02-18 14:18:23

标签: c++ boost

我有一个这样的字符串:

std::string input("I #am going to# learn how #to use #boost# library#");

我这样做:

std::vector<std::string> splitVector;
boost::split(splitVector, input, boost::is_any_of("#"));

得到了这个:(splitVector)

splitVector:
        "I "
        "am going to"
        " learn how " 
        "to use "
        "boos"
        " library"
        "" // **That's odd, why do I have an empty string here ?**

但是需要这样的东西:

splitVector:
    "I "
    "#am going to"
    "# learn how "
    "#to use "
    "#boost"
    "# library"
    "#"

怎么做?或者也许在boost库中有另一种方法可以做到这一点? 为什么我在splitVector中得到一个空字符串?

1 个答案:

答案 0 :(得分:5)

您无法使用boost::split,因为使用来自split_iterator的{​​{1}}的内部实施会吞下令牌。

但是你可以使用boost/algorithm/string/find_iterator.hpp,因为它可以选择保留分隔符:

  

每当输入序列中出现分隔符时,当前令牌就会完成,并开始新的令牌。 dropped_delims中的分隔符不会在输出中显示为令牌,而keep_delims中的分隔符确实显示为令牌。
http://www.boost.org/doc/libs/1_55_0/libs/tokenizer/char_separator.htm

<强> See next live:

boost::tokenizer