为什么我擦除其他字符时最后一个字符加倍,并且如何防止呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我擦除其他字符时最后一个字符加倍,并且如何防止呢?相关的知识,希望对你有一定的参考价值。

我有以下代码:

auto rrr="my mixed string"s;
rrr.erase(std::remove_if(std::begin(rrr), std::end(rrr), [](char const c)  return c == 'm'; ));
std::cout<<rrr<<std::endl;

输出为y ixed stringg

我希望代码只删除字符串中的每个m,而是在末尾也添加了g

为什么会这样,如何解决?

答案
您使用了错误的erase重载。您正在调用erase()重载,该重载使用单个迭代器参数,该迭代器是从字符串中删除的单个字符的迭代器。

如果要删除字符串末尾的所有内容,也请传递end()。

以上是关于为什么我擦除其他字符时最后一个字符加倍,并且如何防止呢?的主要内容,如果未能解决你的问题,请参考以下文章

std::string 擦除最后一个字符失败?

stl中字符串中的擦除关键字的工作?

C ++有符号字符加倍

字符串擦除字符并压缩

Linux 快捷键,让你的工作效率加倍

IF 如何影响复杂性?