2019独角兽企业重金招聘Python工程师标准>>>

转载请标明出处:
http://blog.csdn.net/u011974987/article/details/52505004
本文出自:【徐Xiho的博客】

c++ 提供的string类包含了若干实用的成员函数,大大方便了字符串的增加、删除、更改、查询等操作。

插入字符串

insert()函数可以在string字符串中置顶的位置插入另一个字符串,它的原型为:

string& insert (size_t pos, const string& str);

看这个插入的格式我们就能猜想到,pos表示要插入的下标;str表示要插入的字符串,它可以是string变量,也可以是C风格的字符串。

看下面的代码:

#include <iostream>
#include <string>
using namespace std;
void main(){string s1, s2, s3;s1 = s2 = "1234567890";s3 = "aaa";s1.insert(5, s3);cout << s1 << endl;s2.insert(5, "bbb");cout << s2 << endl;system("pause");
}

运行结果:

12345aaa67890
12345bbb67890
请按任意键继续. . .

insert()函数的第一个参数有越界的可能,如果越界,则会产生运行时异常。我恶魔你要捕获这个异常。


删除字符串

erase()函数可以删除string变量中的一个字符串,原型为:

string& erase (size_t pos = 0, size_t len = npos);

pos 表示要删除的子字符串的起始下标,len表示要删除子字符串的长度。如果不指明len的话,那么直接删除pos到字符串结束处的所有字符(此时len =str.length-pos)。

示例代码如下:

#include <iostream>
#include <string>
using namespace std;
void main(){string s1, s2, s3;s1 = s2 = s3 = "1234567890";s2.erase(5);s3.erase(5, 3);cout<< s1 <<endl;cout<< s2 <<endl;cout<< s3 <<endl;system("pause");
}

运行结果:

1234567890
12345
1234590
请按任意键继续. . .

在 pos 参数没有越界的情况下, len 参数也可能会导致要删除的子字符串越界。但实际上这种情况不会发生,erase() 函数会从以下两个值中取出最小的一个作为待删除子字符串的长度:

  • len的值
  • 字符串长度减去 pos 的值。

简单的说,就是待删除字符串最多只能删除到字符串结尾。


提取字符串

substr()函数原型为:

string substr (size_t pos = 0, size_t len = npos) const;

pos为要提取的子字符串的起始下标,len为要提取的子字符串的长度。

#include <iostream>
#include <string>
using namespace std;
void  main(){string s1 = "first second third";string s2;s2 = s1.substr(6, 6);cout << s1 << endl;cout << s2 << endl;system("pause");
}

输出结果为:

first second third
second
请按任意键继续. . .

系统对 substr() 参数的处理和 erase() 类似:

  • 如果 pos 越界,会抛出异常;
  • 如果 len 越界,会提取从 pos 到字符串结尾处的所有字符。

字符串的查找

find()函数

find()函数用于string字符串中查找子字符串出现的位置,它的原型为:

size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;

第一个参数的表示为待查找的子字符串,它可以是string变量,也可以是C风格的字符串,第二个参数表示开始查找的位置(下标);

/字符串查找替换
void main()
{string s1 = "apple google apple iphone";//从0开始查找"google"的位置int idx = s1.find("google", 0);cout << idx << endl;//统计apple出现的次数int idx_app = s1.find("apple",0);//npos大于任何有效下标的值int num = 0;while (idx_app != string::npos){num++;cout << "找到的索引:" << idx_app << endl;idx_app+=5;idx_app = s1.find("apple", idx_app);}cout << num << endl;system("pause");
}

输出结果为:

6
找到的索引:0
找到的索引:13
2
请按任意键继续. . .

find函数最终返回的是子字符串 第一次出现在字符串的其实下标,如果没有查找到子字符串,那么会返回一个无穷大的值 4294967295。统计apple出现的次数。先查找第一次出现的位置,接着
和npos大于任何有效下标的值,来判断,while循环,每次加上自身的长度,最后统计出现的次数。。。


rfind()函数

rfind() 和 find() 很类似,同样是在字符串中查找子字符串,不同的是 find() 函数从第二个参数开始往后查找,而 rfind() 函数则最多查找到第二个参数处,如果到了第二个参数所指定的下标还没有找到子字符串,则返回一个无穷大值4294967295。

#include <iostream>
#include <string>
using namespace std;
void main(){string s1 = "first second third";string s2 = "second";int index = s1.rfind(s2, 6);if (index < s1.length())cout << "Found at index : " << index << endl;elsecout << "Not found" << endl;system("pause");
}

运行的结果为:

Found at index : 6
请按任意键继续. . .

find_first_of() 函数

find_first_of() 函数用于查找子字符串和字符串共同具有的字符在再辅传中首先出现的位置。

#include <iostream>
#include <string>
using namespace std;
int main(){string s1 = "first second second third";string s2 = "asecond";int index = s1.find_first_of(s2);if(index < s1.length())cout<<"Found at index : "<< index <<endl;elsecout<<"Not found"<<endl;return 0;
}

运行结果为:

Found at index : 3

s1 和 s2 共同具有的字符是 ’s’,该字符在 s1 中首次出现的下标是3,故查找结果返回3。

学习理解并整理下来的笔记。
希望大家能够指点或提出宝贵意见,谢谢!一起学习。
转载请注明出处:http://blog.csdn.net/u011974987/article/details/52505004
个人主页:xuhaoblog.com

转载于:https://my.oschina.net/xuhaozi/blog/780391

C++ string字符串的增删改查相关推荐

  1. DAY4(python)打印字符串以及增删改查

    用while循环打印字符串 #if i in s: # print ( i ) s='nanfjkhndaol' index = 0 while 1 : print (s[index]) index+ ...

  2. python字符串添加_python字符串的增删改查

    字符串增加 直接 + name = 'de8ug' city = 'beijing' info = name + ' ' + city info 'de8ug beijing' % 占位符替换 'na ...

  3. 使用sed -i对文本字符串进行增删改查

    sed是一个很好的文件处理工具,本身是一个管道命令,主要以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作. 1. sed命令行格式 sed [选项] [命令] 1.1 选项 -n, ...

  4. Redis 增删改查详解

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.一个高性能的key-value数据库.并提供多种语言的API.说到Key-Value数据库NoSQL数据库可以想 ...

  5. resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...

  6. vs连接mysql建一个表并增删查改_VS连接SQL Server数据库,增删改查详细教程(C#代码)...

    工具: 1.Visual Studio (我使用的是vs2013) 2.SQL Server  (我使用的是sql server2008) 操作: 1.打开SQL Server,打开后会看到数据库的初 ...

  7. 使用三层架构实现简单的MVC登陆操作!并实现基本的增删改查功能!!

    一丶使用三层架构创建一个简单的MVC登录操作 1.首先,创建一个项目以及BLL层.DAL层.Entity层,如图一: 图一 2.创建一个数据库如图二: 图二 3基本工作已做好,接下来就编BLL层.DA ...

  8. mock模拟的数据能增删改查吗_Mock.js模拟数据,脱离后端独立开发,实现增删改查功能...

    在目前容近对端手近对端手近对端手近对端手近我们的生产实际中,后端的接口往往是较晚才会出来,并且还要写接口文档,于是我们的前端的许多开发都要等到接口给我们才能进行,这样对于我们前端来说显得十分的被动,于 ...

  9. Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...

最新文章

  1. JavaScript入门篇 - DOM操作
  2. jquery 判断一个对象是否存在
  3. exe文件图标变成了白色无图标
  4. 风控项目-收集基础知识1
  5. Python学习笔记__8章错误、调试和测试__8.1章错误处理
  6. 交通银行软件中心编制_国家标准研究项目区块链服务技术安全要求编制启动会顺利召开...
  7. Opencv透视变换——cv::getPerspectiveTransform()与cv::warpPerspective()详解
  8. Delphi WebBrowser控件的使用
  9. Manage,管道的简单应用,进程池,队列的简单应用
  10. 文化艺术报新闻报道IT诗人(转)
  11. 如何在linux安装gcc,如何在Linux安装gcc
  12. pod 文件管理服务器,k8s中pod的状态管理
  13. service暴露端口的方式与代理的方式
  14. 怎么可以快速解决网络劫持
  15. 抖音 快手 等短视频自动向下滑动
  16. 8g内存一般占用多少_8g内存开机占用一半|Windows操作系统内存使用率多少正常?...
  17. 基于WEB 的实时事件通知
  18. 张艾迪(创始人): 辍学的互联网天才
  19. sendmail danted
  20. x64/x86-64/AMD64/ml64入门解惑

热门文章

  1. 服务器系统2022安装wsl2,手把手教你踩坑:老白的Docker for Windows安装初探WSL 2 backend...
  2. 点餐小程序源码_微信小程序餐饮点餐商城前端模版
  3. diff算法_详解虚拟 DOM 与 DOM-Diff 算法,面试官放码过来!
  4. cad在线转低版本_为什么别人CAD绘图总是比你快?因为他早就偷偷掌握了这几个技巧...
  5. 共享主机与虚拟机文件方式一
  6. SpringBoot应用中JSP的角色及整合
  7. 前后端分离的用户验证原理及Spring Boot + JWT的框架搭建(附完整的框架代码)之一
  8. php打造自己的喜马拉雅,打造自己的私人知识宝库利器——mybase 7.3.5
  9. excel range 判断日期型_EXCEL常用函数二
  10. 路径还原(求两个点之间最短距离的路径)