C++ string删除部分字符
在开发中遇到一个问题,删除字符串中的一段字符,在Python中可以通过切片来做,但是C++一下子不知道用什么来完成,搜索网上的博客居然讲的我头晕晕的,于是我自己搜索资料后总结了一下。
使用substr或者erase,用的比较多的是substr,看名字也好理解,取子串的意思。
方法一
删除一部分字符可以理解为取出另一部分字符,所以可以使用substr子串函数,比如如下代码取出前三个字符,substr第一个参数代表从第几个字符开始,第二个代表取几个字符。
substr不会改变原字符串的值,他是返回了一个新的字符串。
注意在使用substr和erase函数的时候,最好在操作之前先检查一下字符串的长度,以免操作越界导致程序崩溃。
#include<string>
#include<iostream>
int main(){
std::string s = "helloworld";
std::string sub = s.substr(0,3);
std::cout << sub << std::endl;
return 0;
}
输出如下,合乎预期
ps: substr是非常经典的算法,要使用滑动窗口的思想来降低复杂度,所以基本每个语言的基本库都有此接口。
方法二
使用erase方法,它的意思是删除字符中的一部分,它一共有四个重载函数。
常用的是第四个:第一个参数是从什么位置删除,第二个参数是删除几个。
比如删除第一个字符就是:
s.erase(0, 1);
获取身份证号后六位,即删除前面12位:
s.erase(0, 12);
删除最后一位:
s.erase(s.end()-1);
或者使用pop_back,它比erase函数更简洁,而且可以在代码中更直观地表达出你的意图。
s.pop_back();
其实C++容器基本上都支持erase操作,这是迭代器、容器、算法的具体体现。但是在实际字符串处理中使用比较少。
C++官网给出的erase例子如下
// string::erase
#include <iostream>
#include <string>
int main ()
{
std::string str ("This is an example sentence.");
std::cout << str << '\n';
// "This is an example sentence."
str.erase (10,8); // ^^^^^^^^
std::cout << str << '\n';
// "This is an sentence."
str.erase (str.begin()+9); // ^
std::cout << str << '\n';
// "This is a sentence."
str.erase (str.begin()+5, str.end()-9); // ^^^^^
std::cout << str << '\n';
// "This sentence."
return 0;
}
可以看到参数除了位置还有迭代器,比如删除所有字符可以这样写,其他所有的容器都可以用类似的方法来删除容器中的所有内容。
s.erase(s.begin(), s.end());
了解下其英文含义是有必要的
erase:
擦除; 清除; 消除; 消灭; 擦掉,抹掉(笔迹等); 抹去,清洗(磁带上的录音或存储器中的信息);
引用:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix