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:

擦除; 清除; 消除; 消灭; 擦掉,抹掉(笔迹等); 抹去,清洗(磁带上的录音或存储器中的信息);

引用:

string::erase - C++ Reference

去掉std::string或std::wstring的最后一个字符的简单方法_idkidknow-CSDN博客

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值