为什么要删空间? C++.erase()

问题描述 投票:0回答:1

我正在解密码战中的卡塔,你必须删除感叹号“!” 但是当使用 .erase() 它也会删除空格我不明白它是如何删除三个'!'连续 这是给我带来问题的字符串 “你好!” 调试它去 “你好!” 它吃掉了空间并结束了 “嗨你好”

这个有效,但我在调试时不明白为什么没有出现更多 “你好世界!!!” 去 “你好世界” 我不明白为什么不出现 “你好世界!!”和“你好世界!”

我以前使用 .erase() 来分割字符串我知道 .erase(first,second) 其中第一个是字符串的开始,第二个是结束独占 .erase() 也是 std::string 的成员函数 - 奖金 - 我尝试使用 .erase(pos,pos) 并且同样有效

这是我的代码

#include <string>

std::string removeExclamationMarks(std::string str){
  std::string remove{ "!" };
std::cerr << str << '\n';
  size_t pos{};
  while( (pos = str.find(remove)) != std::string::npos ){
std::cerr << pos << '\n';
    str.erase(pos, pos + remove.length());
std::cerr << str << '\n';
  }
std::cerr << "END\n";
  return str;
}
c++ string while-loop char erase
1个回答
2
投票

这个方法的调用

erase
是不正确的

str.erase(pos, pos + remove.length());

第二个参数指定要擦除的元素数。

所以你需要改写

str.erase(pos, remove.length());

注意如果你的编译器支持C++20那么你可以这样写

std::erase( str, '!' );
© www.soinside.com 2019 - 2024. All rights reserved.