如何使用boost :: is_any_of和boost :: replace_all_copy

czc*_*ong 3 c++ boost

我正在尝试使用boost::is_any_of和编写一段简单的代码boost::replace_all_copy.该片段如下:

std::string someString = "abc.def-ghi";
std::string toReplace = ".-";
std::string processedString = boost::replace_all_copy(someString, boost::is_any_of(toReplace), " ");
Run Code Online (Sandbox Code Playgroud)

但是,我得到的编译器错误太长,无法在此处粘贴.有经验这两个功能的人可以指出我的错误吗?

jro*_*rok 7

我不认为你不能.三参数版本boost::replace_all_copy采用输入字符串,替换字符串和要搜索的字符串.什么boost::is_any_of返回的是一个谓词函子.

你可能想要的是boost::replace_if:

#include <boost/algorithm/string.hpp>            // for is_any_of
#include <boost/range/algorithm/replace_if.hpp>  // for replace_if
#include <string>
#include <iostream>

std::string someString = "abc.def-ghi";
std::string toReplace = ".-";
std::string processedString =
   boost::replace_if(someString, boost::is_any_of(toReplace), ' ');

int main()
{
    std::cout << processedString;
}
Run Code Online (Sandbox Code Playgroud)

这会修改原件,所以如果需要保留原件,可以使用boost::replace_copy_if:

#include <boost/algorithm/string.hpp>
#include <boost/range/algorithm/replace_copy_if.hpp>
#include <string>
#include <iostream>
#include <iterator>    // for back_inserter

std::string someString = "abc.def-ghi";
std::string toReplace = ".-";

int main()
{
    std::string processedString;
    boost::replace_copy_if(someString,
        std::back_inserter(processedString), boost::is_any_of(toReplace), ' ');
    std::cout << processedString;
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.