c++ - boost::split 可以用在只有一个 token 的列表上吗?

标签 c++ algorithm parsing boost boost-tokenizer

我想遍历以逗号分隔的字符串列表,并对每个字符串执行操作。有没有办法设置 boost::split 以将“abc,xyz”和“abc”都识别为有效输入?换句话说,如果谓词不匹配任何内容,Split 是否可以返回整个输入字符串?

或者我应该改用 boost:tokenizer 吗?

最佳答案

Boost 1.54 完全可以满足您的需求。还没有尝试过更新的版本。

例子:

#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>

int main()
{
  std::string test1 = "abc,xyz";
  std::vector<std::string> result1;
  boost::algorithm::split(result1, test1, boost::is_any_of(","));
  for (auto const & s : result1)
  {
    std::cout << s << std::endl;
  }

  std::string test2 = "abc";
  std::vector<std::string> result2;
  boost::algorithm::split(result2, test2, boost::is_any_of(","));
  for (auto const & s : result2)
  {
    std::cout << s << std::endl;
  }

  return 0;
}

产生:

abc
xyz
abc

关于c++ - boost::split 可以用在只有一个 token 的列表上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32105763/

相关文章:

从一组中选择 n 个向量同时最小化成本的算法

Pandas 。如果值包含一些字母,如何删除行

c++ - 将 const char 转换为 char 时出现未处理的异常

c++ - 如何添加枚举类型来引用数组

c++ - opencv grabcut 保存结果

algorithm - 计算数组中项目的频率 - 没有两个 for 循环

c++ - 平衡括号问题为什么检查它是否为空?

c# - IP 地址验证

javascript - 以功能方式解析结构化数据(例如,不改变)

c++ - 来自 QSocket 的 readyRead() 信号的行为