我正在使用以下代码:
replace (str1.begin(), str1.end(), 'a' , '')
但是这给出了编译错误。
发布于 2013-12-02 18:51:03
基本上,replace
用一个字符替换另一个字符,而''
不是一个字符。你要找的是erase
。
参见this question,它回答了同样的问题。在您的案例中:
#include <algorithm>
str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());
或者使用boost
,如果你可以这样做的话,比如:
#include <boost/algorithm/string.hpp>
boost::erase_all(str, "a");
所有这些在reference websites上都有很好的文档记录。但是如果你不知道这些函数,你可以很容易地手工完成这类事情:
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];
发布于 2013-12-02 18:59:59
使用copy_if
#include <string>
#include <iostream>
#include <algorithm>
int main() {
std::string s1 = "a1a2b3c4a5";
std::string s2;
std::copy_if(s1.begin(), s1.end(), std::back_inserter(s2),
[](char c){
std::string exclude = "a";
return exclude.find(c) == std::string::npos;}
);
std::cout << s2 << '\n';
return 0;
}
发布于 2021-10-13 06:09:39
从C++20开始,std::erase()
被添加到标准库中,它将对str.erase()
和std::remove()
的调用合并到一个函数中:
std::erase(str, 'a');
在<string>
头文件中直接定义了作用于字符串的std::erase()
函数重载,因此不需要单独的includes。对于所有其他容器都定义了类似的重载。
https://stackoverflow.com/questions/20326356
复制相似问题