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

C++ split string on multiple substrings

本文关键字:字符串 拆分 c++      更新时间:2023-10-16

在c++中,我想做一些类似的事情:

分割子字符串

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

我会使用正则表达式,从<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中使用正则表达式支持。请看这里的例子。

下面是一个可以拆分字符串的示例代码:
#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;
}