C ++在多个子字符串上拆分字符串

Posted

技术标签:

【中文标题】C ++在多个子字符串上拆分字符串【英文标题】:C++ split string on multiple substrings 【发布时间】:2011-12-13 21:03:05 【问题描述】:

在 C++ 中,我想要类似的东西:

Split on substring

但是,我想指定 多个 子字符串进行拆分。例如,我想将字符串“fda+hifoolkjba4”的“+”、“foo”、“ba”拆分为“fda”、“hi”、“lkj”、“4”的向量。有什么建议么?最好在 STL 和 Boost 中(如果可以避免的话,我宁愿不必合并 Qt 框架或其他库)。

【问题讨论】:

【参考方案1】:

我会使用正则表达式,来自<regex><boost/regex.hpp>;您需要的正则表达式类似于(.*?)(\+|foo|ba)(加上最终标记)。

这是一个使用 Boost 的简化示例:

  std::string str(argv[1]);

  boost::regex r("(.*?)(\\+|foo|ba)");
  boost::sregex_iterator rt(str.begin(), str.end(), r), rend;

  std::string final;

  for ( ; rt != rend; ++rt)
  
    std::cout << (*rt)[1] << std::endl;
    final = rt->suffix();
  
  std::cout << final << std::endl;

【讨论】:

谢谢,我不太热衷于使用 boost 正则表达式,因为编译的库在我的 mac 上运行得不太好。我可以让它们工作,但我需要指向我的 dynlib 文件(在可执行目录或指定目录中 - 不完全适合以独立形式分发我的工作),但这是另一个问题的问题。 @daj: 好吧,那就得到一个现代编译器并使用标准库中的&lt;regex&gt; :-) 相同的接口,只需将boost 更改为std 太好了,我没有意识到它现在在标准库中。我确实更喜欢 Boost 的 split_regex() 函数来执行此操作(因为迭代被单行替换),这似乎没有被添加:-(【参考方案2】:

我建议在 boost 中使用正则表达式支持。示例见here。

这是一个可以拆分字符串的示例代码:

#include <iostream>
#include <boost/regex.hpp>

using namespace std;    

int main()


    boost::regex re("(\\+|foo|ba)");
    std::string s("fda+hifoolkjba4");

    boost::sregex_token_iterator i(s.begin(), s.end(), re, -1);
    boost::sregex_token_iterator j;
    while (i != j) 
       std::cout << *i++ << " ";
    
    std::cout << std::endl;
    return 0;

【讨论】:

以上是关于C ++在多个子字符串上拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

在C中使用多个分隔符拆分字符串[重复]

在c ++中拆分偶数字符串

VB.Net/C# - 在自定义函数上拆分字符串

将字符串拆分为等长的部分c ++

OpenOffice - 组合多个功能 - 子字符串

如何将子字符串拆分为多个块并使用 C# 将它们输入到表中?