【问题标题】:How to tell boost::split_iterator to start in the middle of string?如何告诉 boost::split_iterator 从字符串中间开始?
【发布时间】:2013-09-26 12:01:57
【问题描述】:

我想遍历字符串中的标记:

 #include <boost/algorithm/string.hpp>

  using namespace boost::algorithm;
  typedef split_iterator<std::string::const_iterator> SplitIter;
  for(SplitIter i = make_split_iterator(str, token_finder(is_space()));
      i != SplitIter(); ++i)
    std::cout << *i << std::endl; // prints token

这种使用split_iterator 的方法对我来说是理想的,因为它不会将匹配项复制到向量中,而只是迭代它找到的范围,因此非常有效。

现在,我该如何修改它,以便拆分迭代器从 str[5] 开始搜索,例如,而不是在字符串的开头?当然,因为我想避免不必要的复制,所以我不想在子字符串副本str.substr(5)上进行搜索。

【问题讨论】:

    标签: c++ boost split iterator range


    【解决方案1】:

    您可以自己构建迭代器:

      for(SplitIter i = split_iterator<std::string::const_iterator>(
                              str.begin() + 5,
                              str.end(),
                              token_finder(is_space()));
          i != SplitIter(); ++i)
        std::cout << *i << '\n'; // prints token
    

    【讨论】:

    • 如果答案是for (SplitIter i = SplitIter( ...,我认为可读性会提高,因为sn-p 中的其他所有内容都使用SplitIter。
    猜你喜欢
    • 1970-01-01
    • 2017-04-09
    • 2021-01-05
    • 1970-01-01
    • 2014-08-08
    • 2019-01-01
    • 2011-02-06
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多