首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何删除c++字符串中出现的所有字符

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

Stack Overflow用户
提问于 2013-12-02 18:46:52
回答 10查看 258.7K关注 0票数 123

我正在使用以下代码:

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

但是这给出了编译错误。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 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];
票数 198
EN

Stack Overflow用户

发布于 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;
}
票数 12
EN

Stack Overflow用户

发布于 2021-10-13 06:09:39

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20326356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档