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: 好吧,那就得到一个现代编译器并使用标准库中的<regex>
:-) 相同的接口,只需将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 ++在多个子字符串上拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章