在开发中遇到一个问题,删除字符串中的一段字符,在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类没有提供类似的方法来清除指定的字符,但是,它提供...