remove_copy使用字符串

时间:2016-07-15 05:42:03

标签: c++ c++11 stl-algorithm

我的字符串是!!(!())。我想从字符串中删除双重感叹号。

这有效,但它会删除所有感叹号

remove_copy(str.begin(), str.end(),ostream_iterator<char>(cout), '!');//gives (())

这不起作用

remove_copy(str.begin(), str.end(),ostream_iterator<string>(cout), "!!");

使用上面的行会抛出此错误

/ usr / include / c ++ / 5 / bits / predefined_ops.h:194:17:错误:ISO C ++禁止指针和整数之间的比较[-fpermissive]   {return * __ it == _M_value; }

1 个答案:

答案 0 :(得分:0)

阅读remove_copy的文档

OutputIterator remove_copy (InputIterator first, InputIterator last,
                          OutputIterator result, const T& val);

The function uses operator== to compare the individual elements to val.

因此它使用字符串的每个字符并将其与val进行比较。所以第二种情况不起作用。

我最终这样做了

str.erase(str.find("!!"),2);

还要确保字符串有&#34; !!&#34;否则程序崩溃

if(str.find("!!") != string::npos)
    str.erase(str.find("!!"),2);