添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在开发中遇到一个问题,删除字符串中的一段字符,在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博客

为什么我不完全主张自学?①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。 C++大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类。string 类处理起字符串来会方便很多,完全可以代替C语言中的字符数组或字符串指针。 iterator erase(iterator p):删除字符串中p所指的字符iterator erase(iterator first, iterator last):删除字符串中迭代器区间 [first, last) 上所有字符string& erase(size_t pos, size_t len):删除字符串中从索引位置 pos 开始的 len 个字符void clear():删除字符串中所有字符 C++string删除指定字符 C++中要从string删除所有某个特定字符, 可用如下代码 str.erase(std::remove(str.begin(), str.end(), ‘a’), str.end()); 其中, remove来自, 它的签名是 template <class ForwardIterator, class T> ForwardIterator remove (ForwardIterator first, Forward JAVA - String删除指定字符(11种方法) 第一种方法 – 通过循环从前往后遍历,如果不是要删除字符则加到处理后的字符串中,代码如下: public String deleteCharString0(String sourceString, char chElemData) { String deleteString = ""; for (int i = 0; i < sourceString.length(); i++) { if (sourceStr C++string删除所有的某个特定字符 str.erase(std::remove(str.begin(), str.end(), 'a'), str.end()); romove来自<algorithm> 作用:在容器中, 在[first, last)之间的所有值等于val的值都会被下一个不等于val的元素覆盖.(除了最后一个元素) 返回值:返回一个迭代器 (记作newEnd), 该迭代器指向最后一个未被删除元素的下一个元素, 即相当于容器新的end. 不会改变输入vecto 这样会从第 m 个位置(包含第 m 个位置)开始截取字符串,直到末尾。 还可以使用 String 类的 replaceFirst 方法来删除任意字符串的开头字符,... C++实现删除给定字符串的给定字符串思路主要有这么几种实现方式: 1.KMP算法2.用STL的string的 find,然后用erase3.用C的strstr找到字串位置,然后用strncpy写到新串中4.用boost库,用正则表达式 测试过的完整代码: 第一种方法: 在Python中,可以使用strip方法来清除掉字符串两端指定字符组成的字符串,在处理字符串时,非常的方便。然而,在C++中,string类没有提供类似的方法来清除指定的字符,但是,它提供...