gpt4 book ai didi

C++一次替换字符串中的多个字符串

转载 作者:IT老高 更新时间:2023-10-28 22:14:53 25 4
gpt4 key购买 nike

给定以下字符串,“Hi ~+ and ^*. ^* 还在 ~+ 周围飞来飞去吗?”

我想将所有出现的 "~+""^*" 替换为 "Bobby"和 "Danny",所以字符串变为:

“嗨,Bobby 和 Danny。Danny 还在 Bobby 周围飞来飞去吗?”

我宁愿不必调用 Boost 替换函数两次来替换两个不同值的出现。

最佳答案

我设法使用 Boost.Iostreams 实现了所需的替换功能。具体来说,我使用的方法是使用正则表达式来匹配要替换的内容的过滤流。我不确定千兆字节大小的文件的性能。当然,您需要对其进行测试。无论如何,这是代码:

#include <boost/regex.hpp>
#include <boost/iostreams/filter/regex.hpp>
#include <boost/iostreams/filtering_stream.hpp>
#include <iostream>

int main()
{
using namespace boost::iostreams;

regex_filter filter1(boost::regex("~\\+"), "Bobby");
regex_filter filter2(boost::regex("\\^\\*"), "Danny");

filtering_ostream out;
out.push(filter1);
out.push(filter2);
out.push(std::cout);

out << "Hi ~+ and ^*. Is ^* still flying around ~+?" << std::endl;

// for file conversion, use this line instead:
//out << std::cin.rdbuf();
}

上面的打印结果 “Hi Bobby 和 Danny。Danny 还在 Bobby 周围飞来飞去吗?” 运行时,就像预期的那样。

如果您决定对其进行衡量,看看性能结果会很有趣。

丹尼尔

编辑:我刚刚意识到 regex_filter 需要将整个字符序列读入内存,这使得它对于千兆字节大小的输入毫无用处。哦,好吧……

关于C++一次替换字符串中的多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3895006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com