我使用以下:
replace (str1.begin(), str1.end(), 'a' , '')
Run Code Online (Sandbox Code Playgroud)
但这会导致编译错误.
Ant*_*ine 152
基本上,replace将角色替换为另一个角色而''不是角色.你在寻找什么erase.
看到这个回答同样问题的问题.在你的情况下:
#include <algorithm>
str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());
Run Code Online (Sandbox Code Playgroud)
或者使用,boost如果这是你的选择,如:
#include <boost/algorithm/string.hpp>
boost::erase_all(str, "a");
Run Code Online (Sandbox Code Playgroud)
所有这些都在参考 网站上有详细记载.但是如果你不知道这些功能,你可以轻松地手工完成这类工作:
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];
Run Code Online (Sandbox Code Playgroud)
Kai*_*zke 20
从 C++20 开始,std::erase()已添加到标准库中,它将对str.erase()和 的调用合并std::remove()到一个函数中:
std::erase(str, 'a');
Run Code Online (Sandbox Code Playgroud)
作用std::erase()于字符串的函数重载直接在<string>头文件中定义,因此不需要单独包含。为所有其他容器定义了类似的重载。
该算法对给定序列的每个元素std::replace起作用(因此它用不同的元素替换元素,并且不能用任何元素替换它).但是没有空洞的角色.如果要从序列中删除元素,则必须移动以下元素,并且不会像这样工作.std::replace
您可以尝试使用std::remove(与...一起std::erase)来实现此目的.
str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());
Run Code Online (Sandbox Code Playgroud)
小智 6
string RemoveChar(string str, char c)
{
string result;
for (size_t i = 0; i < str.size(); i++)
{
char currentChar = str[i];
if (currentChar != c)
result += currentChar;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我就是这样做的。
或者你可以像 Antoine 提到的那样做:
看到这个问题 ,它回答了同样的问题。在你的情况下:
Run Code Online (Sandbox Code Playgroud)#include <algorithm> str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());
使用copy_if:
#include <string>
#include <iostream>
#include <algorithm>
int main() {
std::string s1 = "a1a2b3c4a5";
char s2[256];
std::copy_if(s1.begin(), s1.end(), s2, [](char c){return c!='a';});
std::cout << s2 << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)