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

** 运行结果**:

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

运行结果

运行结果

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 <

运行结果

运行结果

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

运行结果

运行结果

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 <

运行结果

运行结果

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

运行结果

运行结果

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

  1. c++ string 删除字符_字符串操作的全面总结(附完整代码)

    字符串操作看似简单,其实非常重要,不注意的话,经常出现代码运行结果和自己想要的不一致,甚至崩溃.本文总结了一些构建string对象方法.修改string对象的方法.string类型的操作函数.stri ...

  2. c++ string 删除字符_算法笔记|(5)第二章C、C++的快速入门字符数组的存放方式string.h文件...

    字符数组的存放方式 由于字符数组是由若干个char类型的元素组成的,因此字符数组的每一位都是一个char字符,除此之外,在一维字符数组或者二维字符数组的第二维的末尾都有一个空字符\0表示存放的字符串的 ...

  3. 5193. 删除字符使字符串变好

    5193. 删除字符使字符串变好 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后 ...

  4. java 删除指定字符_字符串删除指定位置字符 JAVA 删除字符串中指定的字符

    <死侍2>有多不按套路出牌? 要CSS布局HTML小编今天和大家分享用到函数的调用. 编制函数fun,其功能是:删除一个字符串中指定的一.问题描述:从键盘输入一个字符串给str和一个字符给 ...

  5. c语言字符串中的字符无效,字符串操作

    字符串主要用于编程,字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的.字符串也有很多操作,在正文将对C语言.C++和java中对其操作进行介绍. 中文名 字符串操作 外文名 strin ...

  6. c语言字符串子串查找_字符串操作的全面总结

    来自公众号:C语言与cpp编程 字符串操作看似简单,其实非常重要,不注意的话,经常出现代码运行结果和自己想要的不一致,甚至崩溃.本文总结了一些构建string对象方法.修改string对象的方法.st ...

  7. Leetcode周赛5193. 删除字符使字符串变好

    题目描述 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后的字符串.题目数据保证答 ...

  8. 字符与字符串操作——Windows via C/C++

    在最新版的Windows, Windows Vista,它应该支持Unicode 5.0.在编程中对字符与字符串的操作是很普通的,为新的系统写代码,尽可能使用Unicode,它提供了更好的性能,以及可 ...

  9. java 替换第二个字符_字符串替换第二个相同的字符

    r语言如何把字符串中连续的几个相同的字符替换为一比如abbccccdd,替换为abcd保罗?科贺:没有一颗心,会因为追分享梦想而受伤. jquery 把字符串中的某个字符全部替换 start.repl ...

最新文章

  1. 08-dispatch_apply
  2. 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】
  3. c语言有一个已经排好的数组,C语言有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中...
  4. 路由器笔记 CCNA
  5. 阿里巴巴中间件在 Serverless 技术领域的探索
  6. 《Microduino实战》——第3章 Microduino入门
  7. 事务回滚什么意思 try_Spring事务管理(一)快速入门
  8. Eclipse调试时出现source not found的问题
  9. python什么时候开始流行的_Python什么时候会被取代?
  10. cdq分治 陌上花开(内无题解)
  11. 百度ERNIE新突破!登顶中文医疗信息处理权威榜单CBLUE冠军
  12. 2015年最新Scala语言视频教程
  13. JAVA常用的七种设计模式
  14. strcmp java_(一)strcmp函数
  15. pixi 小游戏_pixi2d小游戏跳一跳源码/pixi教程,基于pixi-spine的2d游戏
  16. 【C++面向对象程序设计——侯捷大师】心得摘要
  17. node.js v14.9.0以及v12.18.3两版本 百度网盘下载链接
  18. 【Simulink教程案例6】基于Simulink的自适应PID控制器设计与实现
  19. 修改手机BP(比如烧号)必备的VSP(Virtual Serial Port)虚拟串口软件
  20. 阅读笔记:黑碳对于冰雪辐射效应的影响

热门文章

  1. Oracle数据库管理员职责(二)
  2. ASP.NET 2.0新特性视频教程下载
  3. 传输层与数据链路层滑动窗口协议的异同
  4. android11 rom,小米打造基于安卓11的ROM来了:米10尝鲜
  5. 清华大学《操作系统》(十一):处理机调度
  6. Flask werkzeug 源码解析
  7. 项目宝提供的服务器,开源WebSocket服务器项目宝贝鱼CshBBrain V4.0.1 和 V2.0.2发布
  8. php 获取delete蚕丝_php结合Redis实现100万用户投票项目,并实时查看到投票情况的案例...
  9. grid autosport额外内容下载慢_清理大王app下载-清理大王v1.0安卓下载
  10. C# DataTable的詳細用法