Я не думаю, что вы не можете. The three parameter version of 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;
}
Это изменяет оригинал, так что если вам нужно, чтобы сохранить его, вы можете использовать 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;
}
Надежда, что помогает.
Я тоже смотрел на это, я не был уверен, насколько важна копия оригинального вопроса. Основываясь на документах, похоже, что someString будет изменена на месте и будет возвращена ссылка. Если копия не важна, мне нравится ваше решение лучше, так как вы избегаете использования регулярного выражения. –
@JesseVogt Хорошо, я обновил ответ. – jrok
Прохладный - не уверен, как я полностью пропустил, увидев 'replace_copy_if' в документах. Хорошее решение. –