c++中如何实现字符串去除指定字符_c++ remove和erase结合用法【实例】
发布时间 - 2026-01-21 00:00:00 点击率:次std::remove不能直接删除字符,因为它仅将不匹配元素前移并返回新逻辑结尾迭代器,容器大小不变;必须配合erase才能真正缩短字符串长度。
为什么 std::remove 不能直接删掉字符?
std::remove 并不是真正删除元素,它只是把所有不等于指定值的元素往前挪,返回一个指向“新逻辑结尾”的迭代器。原容器大小不变,末尾残留的是被覆盖掉的旧值(未定义行为,但通常仍是原字符)。所以必须配合 erase 才能真正缩短字符串长度。
用 erase(remove(...)) 删除单个字符
这是最常用、最安全的写法,适用于 std::string。注意:必须用成员函数 erase,不能只调 remove。
std::string s = "abccbd"; s.erase(std::remove(s.begin(), s.end(), 'c'), s.end()); // 结果: "abbd"
-
std::remove返回新结尾位置,比如处理后前4个是有效字符,则返回s.begin() + 4 -
s.erase(it, s.end())把从it到末尾全部删掉 - 该组合是“稳定”且“无副作用”的,不会越界或崩溃
删除多个不同字符(如空格、换行、制表符)
不能直接用 remove,得换成 std::remove_if + lambda 或谓词函数。
std::string s = "hello\tworld\n "; s.erase(std::remove_if(s.begin(), s.end(), [](char c) { return std::isspace(static_cast
(c)); }), s.end());
-
std::isspace要求参数是unsigned char或EOF,否则对负值(如某些 locale 下的 char)有未定义行为 - lambda 中显式转成
unsigned char是必须的,否则在 macOS / Linux 上可能 crash - 如果只删特定几个字符(比如 'a'、'b'、'c'),可用
find_first_of循环或写更紧凑的 lambda:[&](char c){ return c=='a' || c=='b' || c=='c'; }
性能和可读性提醒
对短字符串(erase(remove(...)) 完全够用;但若频繁操作长字符串且只删少量字符,逐个 find + erase 可能更慢(因为每次 erase 都触发内存搬移)。
- 避免写成
s.erase(0, s.find('x'))这类误用——它只删开头到第一个 'x',不是删所有 'x' - 不要对
const std::string&调用remove,编译不过;要改就得传非 const 引用或值 - 如果源字符串很大又不想修改原串,考虑用
std::copy_if写入新字符串,避免反复搬移
真正容易出错的地方,往往不是语法,而是忘记 erase,或者在 remove_if 里漏掉 unsigned char 强转。
# linux
# mac
# c++
# macos
# cos
# 为什么
# EOF
# String
# 成员函数
# 字符串
# char
# 循环
# Lambda
# 的是
# 这是
# 迭代
# 几个
# 多个
# 适用于
# 这类
# 仍是
# 就得
# 因为它
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
node.js报错:Cannot find module 'ejs'的解决办法
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
googleplay官方入口在哪里_Google Play官方商店快速入口指南
javascript读取文本节点方法小结
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
网站制作价目表怎么做,珍爱网婚介费用多少?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
如何挑选最适合建站的高性能VPS主机?
如何确保FTP站点访问权限与数据传输安全?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
微信小程序 scroll-view组件实现列表页实例代码
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
如何在Windows虚拟主机上快速搭建网站?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
黑客如何利用漏洞与弱口令入侵网站服务器?
如何在VPS电脑上快速搭建网站?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Linux网络带宽限制_tc配置实践解析【教程】
Laravel如何使用Livewire构建动态组件?(入门代码)
Android使用GridView实现日历的简单功能
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
如何彻底删除建站之星生成的Banner?
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel如何处理文件下载请求?(Response示例)
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
利用JavaScript实现拖拽改变元素大小
Java垃圾回收器的方法和原理总结
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
做企业网站制作流程,企业网站制作基本流程有哪些?
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
js实现获取鼠标当前的位置
Bootstrap整体框架之CSS12栅格系统
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
详解Android图表 MPAndroidChart折线图
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
php打包exe后无法访问网络共享_共享权限设置方法【教程】
北京企业网站设计制作公司,北京铁路集团官方网站?
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控


