c++ string 删除字符_字符串操作的全面总结

cafa43766605ca7e98f1ae180cebd297.png

来自公众号: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 <

** 运行结果**:

ab492399f609cc2874d2a3526953bd38.png

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;}

运行结果

c512d78bc329c09ac92f0fc98f110ef5.png

运行结果

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 <

运行结果

a5809536b11a6a0a1147f8f8baefb20f.png

运行结果

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;}

运行结果

b061e9bbf5c3d4b76d75452b2661accb.png

运行结果

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 <

运行结果

7ace7580420bca0e9f1800bf8808a6fa.png

运行结果

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

运行结果

0d4199d3d7dc6c580717194fb6228428.png

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Pytorch神经网络理论篇】 40 Transformers中的词表工具Tokenizer

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

warning: function declaration isn’t a prototype(函数声明不是原型)的解决办法

linux驱动中定义一个无参的函数int probe_num(){....}警告&#xff1a;函数声明不是一个原型 [-Wstrict-prototypes]应对方法&#xff1a;改成int probe_num( void){....}警告消失 http://blog.csdn.net/dumgeewang/article/details/7410477

【Pytorch神经网络实战案例】34 使用GPT-2模型实现句子补全功能(手动加载)

1 GPT-2 模型结构 GPT-2的整体结构如下图&#xff0c;GPT-2是以Transformer为基础构建的&#xff0c;使用字节对编码的方法进行数据预处理&#xff0c;通过预测下一个词任务进行预训练的语言模型。 1.1 GPT-2 功能简介 GPT-2 就是一个语言模型&#xff0c;能够根据上文预测下…

电容式传感器位移性能试验报告_一文读懂什么是接近传感器?

点击上方蓝字 记得关注我们哦&#xff01;接近传感器是一种非接触式传感器&#xff0c;当目标进入传感器的视野时&#xff0c;它会检测到物体(通常称为“目标”)的存在。取决于接近传感器的类型&#xff0c;传感器可以利用声音&#xff0c;光&#xff0c;红外辐射(IR)或电磁场来…

[dts]DTS实例分析

2. 通常会碰到的实际问题 到此&#xff0c;问题出现了&#xff1a; 1. 当写一个按键驱动&#xff0c;应该如何在*.dts或者*.dtsi中操作? 2. 当在串口driver中需要使用到某个pin脚作为普通输出IO&#xff0c;该如何操作&#xff1f; 3. 当在串口driver中需要使用某个muxpin脚作…

【解决】YOLOv6.1安装requirements.txt报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x84

案例描述: 使用YOLOV5时&#xff0c;报错解决UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x84 in position 285: illegal multibyte sequence 解决方案&#xff1a; 在C:\ProgramData\Anaconda3\lib\distutils\dist.py"文件搜索read 将parser.read(filenam…

bp 神经网络 优点 不足_深度学习之BP神经网络--Stata和R同步实现(附Stata数据和代码)

说明&#xff1a;本文原发于“计量经济圈”公众号&#xff0c;在此仅展示Stata的部分。R部分请移步至本人主页的“R语言与机器学习--经济学视角”专栏&#xff0c;或点击下方链接卡跳转。盲区行者&#xff1a;深度学习之BP神经网络--Stata和R同步实现&#xff08;附R数据和代码…

高通平台中gpio简单操作和调试

做底层驱动免不了gpio打交道&#xff0c;所以对其操作和调试进行了一下简单的梳理 一、gpio的调试方法 在Linux下&#xff0c;通过sysfs&#xff0c;获取gpio状态&#xff0c;也可以操作gpio。 1、获取gpio状态 cd /sys/kernel/debug/ cat gpio 2、操作gpio&#xff08;以gpi…

Win10系统下使用anaconda在虚拟环境下安装CUDA及CUDNN

前排预警&#xff1a;不要挂梯子!!!!!使用清华源就行不然报错&#xff01;&#xff01;&#xff01;&#xff01; 解决check_hostname requires server_hostname_orange_の_呜的博客-CSDN博客错误描述在GitHub下载代码文件后使用pip install -r requirement.txt下载依赖包时出…

jlink问题

现在淘宝上买到的JLINK都是盗版的&#xff0c;用着用着的时候就会遇到各种异常问题&#xff0c; 这里有一个方法来修改SN&#xff0c;修改SN后就会变得正常了&#xff0c;亲测有效 两种固件: V*_ID-自定义.* 是出厂设置,烧入后用jlink.exe连接上S/N会显示-1. 此时可以根据自己的…

将XML格式转化为YOLO需要的txt格式(代码)

1、XML的格式 <annotation><folder>cr</folder><filename>crazing_2.jpg</filename><source><database>NEU-DET</database></source><size><width>200</width><height>200</height><…

js 点击button切换颜色_ThingJS 和three.js开发示例对比,让开发早点下班回家!3D 可视化...

ThingJS 3D框架简化了开发工作&#xff0c;面向对象和模块化的特点使得网页代码更加易于管理和维护&#xff0c;并且提供近200个官方示例&#xff0c;直接获取API能力&#xff0c;不需要基于3D概念进行开发&#xff0c;适合3D商业项目快速生成&#xff01;距离您的业务仅一层之…

变量命名

列举一下我自己的一些写法 local_int_loop_count global_int_data_count local_bool_plug_insert_flag global_bool_ble_connect_flag函数命名 get_tick_number set_tick_number为了代码清晰易懂&#xff0c;通常变量名采用一些著名的命名规则&#xff0c;主要有Camel标记法&am…

VSCode使用技巧——Ctrl+鼠标滚轮键使字体进行缩放

点击VSCode左下角的齿轮&#xff0c;进入设置 进入Extensions——》JSON——》Edit in settings.json 在json当中添加如下&#xff1a; "editor.mouseWheelZoom": true,

python 交互式可视化库_Python 交互式可视化库

Python 交互式可视化库 所属分类&#xff1a;中间件编程 开发工具&#xff1a;Python 文件大小&#xff1a;12843KB 下载次数&#xff1a;1 上传日期&#xff1a;2018-12-06 18:40:56 上 传 者&#xff1a;孤独的老张 说明&#xff1a; 一个 Python 交互式可视化库&#xff0c;…

OpenCV各版本差异与演化,从1.x到4.0

最近因项目需要&#xff0c;得把OpenCV捡起来&#xff0c;登录OpenCV官网&#xff0c;竟然发现release了4.0.0-beata版本&#xff0c;所以借此机会&#xff0c;查阅资料&#xff0c;了解下OpenCV各版本的差异及其演化过程&#xff0c;形成了以下几点认识&#xff1a; 新版本的…

python题库刷题训练软件_Python基础练习100题 ( 11~ 20)

刷题继续 上一期和大家分享了前10道题&#xff0c;今天继续来刷11~20 Question 11: Write a program which accepts a sequence of comma separated 4 digit binary numbers as its input and then check whether they are divisible by 5 or not. The numbers that are divisi…

如何学习计算机图形学

http://blog.csdn.net/szchtx/article/details/6916675转载于:https://www.cnblogs.com/ArcherHuang/p/6574560.html

shell for循环

weiqifaubuntu:~/qcom$ for i in $(seq 1 1 10) > do > echo "hello World" > done hello World hello World hello World hello World hello World hello World hello World hello World hello World hello World weiqifaubuntu:~/qcom$ 输入for i in $(s…

西门子s7-200解密软件下载_西门子S7-200/300/400通讯方式汇总,超级全面

1西门子 200 plc 使用 MPI 协议与组态王进行通讯时需要哪些设置?1)在运行组态王的机器上需要安装西门子公司提供的 STEP7 Microwin 3.2 的编程软件&#xff0c;我们的驱动需要调用编程软件提供的 MPI 接口库函数;2)需要将 MPI 通讯卡 CP5611 卡安装在计算机的插槽中&#xff0…