如何删除c字符串中所有出现的char

新手上路,请多包涵

我正在使用以下内容:

 replace (str1.begin(), str1.end(), 'a' , '')

但这会导致编译错误。

原文由 Devesh Agrawal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 753
2 个回答

基本上, replace 用另一个字符替换一个字符,而 '' 不是一个字符。您正在寻找的是 erase

请参阅 这个问题,它回答了同样的问题。在你的情况下:

 #include <algorithm>
str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());

或者使用 boost 如果这是您的选择,例如:

 #include <boost/algorithm/string.hpp>
boost::erase_all(str, "a");

所有这些在 参考 网站 上都有详细记录。但是如果你不知道这些功能,你可以很容易地用手做这种事情:

 std::string output;
output.reserve(str.size()); // optional, avoids buffer reallocations in the loop
for(size_t i = 0; i < str.size(); ++i)
  if(str[i] != 'a') output += str[i];

原文由 Antoine 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 C++20 开始, std::erase() 已添加到标准库中,它将对 str.erase()std::remove() 的调用合并为一个函数:

 std::erase(str, 'a');

std::erase() 作用于字符串的函数重载直接在 <string> 头文件中定义,因此不需要单独的包含。为所有其他容器定义了类似的重载。

原文由 Kai Petzke 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题