boost :: erase_all从字符串中删除多个字符

11 c++ string boost

如果我想删除字符串中的所有字符串boost::erase_all,我可以这样做:

boost::erase_all( "a1b1c1", "1" );
Run Code Online (Sandbox Code Playgroud)

现在,我的字符串是"abc".但是,如果我想从字符串中删除所有数字(0 - 9),使用boost::erase_all,我必须为我希望删除的每个数字调用一次.

boost::erase_all( "a1b2c3", "1" );
boost::erase_all( "a1b2c3", "2" );
boost::erase_all( "a1b2c3", "3" );
Run Code Online (Sandbox Code Playgroud)

我认为我可以boost::is_any_of立即将它们全部删除,因为它适用于其他提升字符串算法boost::split,但is_any_of似乎不适用于erase_all:

boost::erase_all( "a1b2c3", boost::is_any_of( "123" ) );

// compile error
boost/algorithm/string/erase.hpp:593:13: error: no matching 
function for call to ‘first_finder(const   
boost::algorithm::detail::is_any_ofF<char>&)’
Run Code Online (Sandbox Code Playgroud)

也许我已经在这里看了一些显而易见的东西,或者还有其他功能,这意味着要做到这一点.我可以使用标准C++手动完成,但只是好奇其他人如何使用boost来做到这一点.

谢谢你的建议.

Ben*_*ley 7

boost有一个remove_if版本,它不需要你传入开始和结束迭代器,但你仍然需要使用end迭代器调用字符串上的erase.

#include <boost/range/algorithm/remove_if.hpp>
...
std::string str = "a1b2c3";
str.erase(boost::remove_if(str, ::isdigit), str.end());
Run Code Online (Sandbox Code Playgroud)

http://www.boost.org/doc/libs/1_49_0/libs/range/doc/html/range/reference/algorithms/mutating/remove_if.html

  • @CarstenGreiner:您可以使用`boost :: is_any_of(" - > <&%")`代替`:: isdigit` (4认同)

ali*_*ure 7

现在也可以:

boost::remove_erase_if(str, boost::is_any_of("123"));