c++ string 删除字符_字符串操作的全面总结
![](/assets/blank.gif)
来自公众号:C语言与cpp编程
字符串操作看似简单,其实非常重要,不注意的话,经常出现代码运行结果和自己想要的不一致,甚至崩溃。本文总结了一些构建string对象方法、修改string对象的方法、string类型的操作函数、string类型的查找、string对象的比较。
1 构建string对象方法
首先,为了在我们的程序中使用string类型,我们必须包含头文件 。如下:
#include
声明一个字符串变量很简单:
string Str;
这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。
String类的构造函数和析构函数如下:
String类函数说明string s;生成一个空字符串sstring s(s2);拷贝构造函数 生成s2的复制品string s("value");用字符串value初始化sstring s(b,e);以区间b,e内的字符作为字符串s的初值string s(cp,n);取字符数组,前n个字符作初值string s(s2,pos2);将字符串s2"始于位置pos2"部分当作字符串的初值string s(s2,pos1,len);将字符串s2内"始于pos1且长度最多len"的部分作为字符串的初值s.~string();销毁所有字符,释放内存
代码实例:
#include #include using namespace std;//20200527 测试字符串操作 C语言与CPP编程int main(){ string s1; cout <
** 运行结果**:
![](/assets/blank.gif)
2 修改string对象的方法
与容器共有的 string 操作:
与容器共有的 string 操作方法说明s.insert(p,t);在迭代器 p 指向的元素之前插入一个值为 t 的新元素,返回指向新插入元素的迭代器s.insert(p,n,t);在迭代器 p 指向的元素之前插入 n 个值为 t 的新元素s.insert(p,b,e);在迭代器 p 指向的元素之前插入迭代器 b 和 e 标记范围内所有的元素。返回 voids.assign(b,e);在迭代器 b 和 e 标记范围内的元素替换 s。string类型,返回 s;容器类型返回 voids.assign(n,t);用值为 t 的 n 个副本替换 s。对于 string 类型,该操作返回 s;对于容器类型,则返回 voids.erase(p);删除迭代器 p 指向的元素。返回一个迭代器,指向被 删除元素后面的元素s.erase(b,e);删除迭代器 b 和 e 标记范围内所有的元素。返回一个迭代器,指向被删除元素段后面的第一个元素
代码实例:
#include #include using namespace std;//2020.05.27 测试字符串操作 公众号:C语言与CPP编程int main(){ string s("hello"); string s2("abcdef"); string::iterator p = s.begin(); //迭代器p s.insert(p,'A'); //在迭代器p指向的s开始之前插入A cout << s << endl; //s为Ahello s.insert(p,3,'B'); //p指向返回的Ahello的A处,在A之前插入3个B cout << s << endl; //s为BBBAhello string::iterator b = s2.begin(); //迭代器b string::iterator e = s2.end(); //迭代器e //p = s.begin(); //p指向s s.insert(p,b,e); //在p指向的s之前插入b和e迭代器范围内的元素abcdef cout << s << endl; //s为abcdefBBBAhello s = "hello"; cout << s << endl; //s为hello s.assign(b,e); //s所有的元素倍替换为b到e之间的元素,b与e之间为s2 cout << s << endl; //s为abcdef s.assign(8,'K'); cout << s << endl; //s为KKKKKKKK p = s2.begin(); //迭代器p指向s2的a s2.erase(p); //删除迭代器p指向的元素a cout << s2 << endl; //s2为bcdef p = s2.begin(); //a被删除,p指向b p++; //指向c p++; //指向d string::iterator p2 = s2.end(); //p2迭代器指向f p2--; //指向e s2.erase(p,p2); //删除p指向的d和p2指向的e之间的元素 cout << s2 << endl; //s2为bcf return 0;}
运行结果:
![](/assets/blank.gif)
运行结果
string 类型特有的版本:
string以数组的形式存储,可以用数组的下标进行修改操作:
string 修改操作方法说明s.insert(pos,n,c);在下标 pos 的元素之前插入 n 个字符 cs.insert(pos,s2);在下标 pos 的元素之前插入 string 对象 s2s.insert(pos,s2,pos2,len);在下标为 pos 的元素之前插入 s2 中从下标 pos2 开始的 len 个字符s.insert(pos,cp,len);在下标为 pos 打元素之前插入 cp 所指向数组的前len 个字符s.insert(pos,cp);在下标为 pos 的元素之前插入 cp 所指向的以空字符结束的字符串副本s.assign(s2);用 s2 的副本替换 ss.assign(s2,pos2,len);用 s2 中从下标 pos2 开始的 len 个字符替换 ss.assign(cp,len);用 cp 所指向数组的前 len 个字符副本替换 ss.assign(cp);用 cp 所指向的以空字符结束的字符串替换 ss.erase(pos,len);删除从下标 pos 开始的 len 个字符
代码实例:
#include #include using namespace std;//2020.05。27 测试字符串操作 公众号:C语言与CPP编程int main(){ string s("hello"); string s2("abc"); s.insert(0,3,'A'); //在s下标是0之前插入3个A cout << s << endl; //s为AAAhello s.insert(5,s2); //在AAAhello下标是5的元素之前插入abc cout << s << endl; //s为AAAheabcllo s2 = "123456"; s.insert(0,s2,2,3); //在s的下标是0之前插入s2下标为2开始往后的3个元素345 cout << s << endl; //s为345AAAheabcllo char *cp = "Stately plup Buck"; s.assign (cp,7); cout << s << endl; //s为Stately s.assign(cp); //没有长度,默认是拷贝全部 cout << s << endl; //s为Stately plup Buck s = "hello"; s.insert (0,cp,7); cout << s <
运行结果:
![](/assets/blank.gif)
运行结果
3 适合string类型操作的函数
- substr()主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。
- append() 方法在被选元素的结尾(仍然在内部)插入指定内容。提示:如需在被选元素的开头插入内容,请使用prepend()方法。
- replace() 该函数返回一个字符串,其中指定的字符串已经被替换为另一字符串,并且替换的次数也可以指定。
代码实例:
#include #include using namespace std;//2020.05.27 测试字符串操作 公众号:C语言与CPP编程int main(){ string s("Hello world"); string s2 = s.substr(6,5); //从第6个开始取5个 cout << s2 << endl ; //s2为world s2 = s.substr(6); //从第6个开始取拷贝所有的 cout << s2 << endl ; //s2为world s2 = s.substr(6); //s2拷贝s的全部,相当于s2=s cout << s2 << endl ; //s2为Hello world s = "C++ Primer"; s.append(" 3rd Ed"); //再s最后添加3rd Ed cout << s<< endl ; //s为C++ Primer 3rd Ed s = "C++ Primer"; s.insert(s.size()," 3rd Ed"); //最后插入 cout << s<< endl ; //s为C++ Primer 3rd Ed s.replace(11,3,"4th"); //下标11开始3个替换4th cout << s<< endl ; //s为C++ Primer 4th Ed s.replace(11,3,"Fourth"); //下标11开始3个替换Fourth cout << s<< endl ; //s为C++ Primer Fourth Ed s = "C++ Primer 3rd Ed"; //replace相当于先删除后插入 s.erase (11,3); //删除3rd s.insert(11,"Fourth"); //插入Fourth cout << s<< endl ; //s为C++ Primer Fourth Ed return 0;}
运行结果:
![](/assets/blank.gif)
运行结果
4 string类型的查找
查找函数说明s.find( args);在 s 中查找 args 的第一次出现s.rfind( args);在 s 中查找 args 的最后一次出现s.find_first_of( args);在 s 中查找 args 的任意字符的第一次出现s.find_last_of( args) ;在 s 中查找 args 的任意字符的最后一次出现s.find_first_not_of( args);在 s 中查找第一个不属于 args 的字符s.find_last_not_of( args);在 s 中查找最后一个不属于 args 的字符
代码实例:
#include #include using namespace std;//2020.05.27 测试字符串操作 公众号:C语言与CPP编程int main(){ string name("AnnaBelle"); string::size_type pos1 = name.find("Bell"); cout << pos1 << endl; //返回下标4,如果没找到返回npos if(pos1 == string::npos) cout << "没找到!" << endl; else cout << "找到了!下标:" << pos1 <
运行结果:
![](/assets/blank.gif)
运行结果
5 string对象的比较
string对象比较函数compare用法说明str1.compare(str2);如果相等则输出为0,str1>str2输出大于0,否则,输出小于0str1.compare(m,n,str2);str1的子串(从索引m开始,包含n个字符)与str2进行比较str1.compare(m,n,str2,m,n);str1的子串(从索引m开始,包含n个字符)与str2的子串(从索引m开始,包含n个字符)进行比较
代码实例:
#include #include #include using std::cout;using std::endl;using std::cin;using std::string;int main(void){ string str1="hi,test,hello"; string str2="hi,test"; //字符串比较 if(str1.compare(str2)>0) printf("str1>str2"); else if(str1.compare(str2)<0) printf("str1
运行结果:
![](/assets/blank.gif)
运行结果
c++ string 删除字符_字符串操作的全面总结相关推荐
- c++ string 删除字符_字符串操作的全面总结(附完整代码)
字符串操作看似简单,其实非常重要,不注意的话,经常出现代码运行结果和自己想要的不一致,甚至崩溃.本文总结了一些构建string对象方法.修改string对象的方法.string类型的操作函数.stri ...
- c++ string 删除字符_算法笔记|(5)第二章C、C++的快速入门字符数组的存放方式string.h文件...
字符数组的存放方式 由于字符数组是由若干个char类型的元素组成的,因此字符数组的每一位都是一个char字符,除此之外,在一维字符数组或者二维字符数组的第二维的末尾都有一个空字符\0表示存放的字符串的 ...
- 5193. 删除字符使字符串变好
5193. 删除字符使字符串变好 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后 ...
- java 删除指定字符_字符串删除指定位置字符 JAVA 删除字符串中指定的字符
<死侍2>有多不按套路出牌? 要CSS布局HTML小编今天和大家分享用到函数的调用. 编制函数fun,其功能是:删除一个字符串中指定的一.问题描述:从键盘输入一个字符串给str和一个字符给 ...
- c语言字符串中的字符无效,字符串操作
字符串主要用于编程,字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的.字符串也有很多操作,在正文将对C语言.C++和java中对其操作进行介绍. 中文名 字符串操作 外文名 strin ...
- c语言字符串子串查找_字符串操作的全面总结
来自公众号:C语言与cpp编程 字符串操作看似简单,其实非常重要,不注意的话,经常出现代码运行结果和自己想要的不一致,甚至崩溃.本文总结了一些构建string对象方法.修改string对象的方法.st ...
- Leetcode周赛5193. 删除字符使字符串变好
题目描述 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后的字符串.题目数据保证答 ...
- 字符与字符串操作——Windows via C/C++
在最新版的Windows, Windows Vista,它应该支持Unicode 5.0.在编程中对字符与字符串的操作是很普通的,为新的系统写代码,尽可能使用Unicode,它提供了更好的性能,以及可 ...
- java 替换第二个字符_字符串替换第二个相同的字符
r语言如何把字符串中连续的几个相同的字符替换为一比如abbccccdd,替换为abcd保罗?科贺:没有一颗心,会因为追分享梦想而受伤. jquery 把字符串中的某个字符全部替换 start.repl ...
最新文章
- 08-dispatch_apply
- 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】
- c语言有一个已经排好的数组,C语言有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中...
- 路由器笔记 CCNA
- 阿里巴巴中间件在 Serverless 技术领域的探索
- 《Microduino实战》——第3章 Microduino入门
- 事务回滚什么意思 try_Spring事务管理(一)快速入门
- Eclipse调试时出现source not found的问题
- python什么时候开始流行的_Python什么时候会被取代?
- cdq分治 陌上花开(内无题解)
- 百度ERNIE新突破!登顶中文医疗信息处理权威榜单CBLUE冠军
- 2015年最新Scala语言视频教程
- JAVA常用的七种设计模式
- strcmp java_(一)strcmp函数
- pixi 小游戏_pixi2d小游戏跳一跳源码/pixi教程,基于pixi-spine的2d游戏
- 【C++面向对象程序设计——侯捷大师】心得摘要
- node.js v14.9.0以及v12.18.3两版本 百度网盘下载链接
- 【Simulink教程案例6】基于Simulink的自适应PID控制器设计与实现
- 修改手机BP(比如烧号)必备的VSP(Virtual Serial Port)虚拟串口软件
- 阅读笔记:黑碳对于冰雪辐射效应的影响
热门文章
- Oracle数据库管理员职责(二)
- ASP.NET 2.0新特性视频教程下载
- 传输层与数据链路层滑动窗口协议的异同
- android11 rom,小米打造基于安卓11的ROM来了:米10尝鲜
- 清华大学《操作系统》(十一):处理机调度
- Flask werkzeug 源码解析
- 项目宝提供的服务器,开源WebSocket服务器项目宝贝鱼CshBBrain V4.0.1 和 V2.0.2发布
- php 获取delete蚕丝_php结合Redis实现100万用户投票项目,并实时查看到投票情况的案例...
- grid autosport额外内容下载慢_清理大王app下载-清理大王v1.0安卓下载
- C# DataTable的詳細用法