cpp的string类

news2024/10/25 15:22:53

本篇将讲述string类中的各种重要和常用函数(string()、begin()、rbegin()、cbegin()、crbegin()、end()、rend()、cend()、crend()、范围for、size()、resize()、capacity()、reserve()、clear()、empty()、append()、push_back()、insert()、erase()、replace()、swap()、find()、rfind()、substr()、compare())。

所有函数使用时应当包含头文件<string>。

如果对您有帮助还请多多点赞,要是文章有错误地方还请你在评论区留言指正。

一、string()

1.string (const char* s)

作用:创建一个string对象,并初始化为字符串s。

用法:

	string s("Hello World");

2.string (size_t n, char c)

作用:创建一个string对象,并初始化为n个字符c。

用法:

	string s(4, 'q');

 3.string (const char* s, size_t n)

作用:创建一个string对象,并初始化为字符串s中的前 n个字符。

用法:

	string s("Hello World", 5);

4.string (const string& str)

作用:创建一个string对象,初始化为对象str相同的字符串。

用法:

string str("Hello World");
string s(str);

5.string (const string& str, size_t pos, size_t len = npos)

作用:创建一个string对象,并初始化成从str的下表为pos开始(第pos个字符之后)的前len个字符。

用法:

string str("Hello World");
string s(str,6,5);

二、string& operator= ()

运算符重载

作用:可以将字符串,字符,或者一个string对象赋值给另一个string对象。

用法:

string s1, s2, s3;
string str("Hello World");
s1 = str;//string& operator= (const string& str);
s2 = "Hello";//string& operator= (const char* s);
s3 = 'Q';//string& operator= (char c);
cout << s1 << endl << s2 << endl << s3 << endl;

 三、迭代器(Iterators

1.begin()和 end() 

iterator begin();
const_iterator begin() const;

作用:返回指向的字符串的第一个字符的迭代器。

用法:

string str("Hello World");
std::string::iterator it = str.begin();
cout << *it << endl;

iterator end();
const_iterator end() const;

作用:返回一个迭代器,该迭代器指向字符串的最后一个字符。

用法:一般与begin连着使用。

string str("Hello World");
std::string::iterator it = str.begin();
for (it; it != str.end(); it++)
{
	cout << *it << ' ';
}

 2.rbegin()和rend()

reverse_iterator rbegin();
const_reverse_iterator rbegin() const;

作用:返回一个反向迭代器,该迭代器指向字符串的最后一个字符(即其反向开头),反向迭代器是反向迭代的,增加它们会让它们向开头的地方移动。

reverse_iterator rend();
const_reverse_iterator rend() const;

作用:返回一个反向迭代器,该迭代器指向字符串第一个字符之前的理论元素(被视为其反向端)。 

用法:rbegin()和rend()一般是联合使用的。

string str("Hello World");
std::string::reverse_iterator rit = str.rbegin();
for (rit; rit != str.rend(); rit++)
{
	cout << *rit << ' ';
}

3.cbegin()和cend()

用法:与1中的begin()和end()用法类似 只是不能改变其指向的内容。

4.crbegin()和crend()

用法:与1中的rbegin()和rend()用法类似 只是不能改变其指向的内容。

5.范围for

作用:遍历一个整个字符串。

用法:

string str("Hello World");
for (auto ch:str)
{
	cout << ch << ' ';
}

三、容量(Capacity) 

1.size()

 

作用:返回字符串的长度(以字节为单位)。

用法:

string str("Hello World");
size_t i=str.size();
cout << i << endl;

2.resize()

作用:将字符串大小调整到n个字符的长度,如果原先的字符个数比n打则删除多余的保留前n个,如果比n小则用字符填补剩余位置使其达到n个字符,如果给定了字符c则在剩余位置填补字符c,如果没给定则填补空字符。

用法:

string s1("Hello World"), s2("Hello World"), s3("Hello World");
s1.resize(5);
s2.resize(15);
s3.resize(15, 'Q');
cout << s1 << endl <<s2 << endl<< s3 << endl;

3.capacity()

作用:返回该对象中字符串所占的空间大小也就是其储存字符的能力大小(与size()不同)。

用法:

string str("Hello World");
size_t i = str.capacity();
cout << i << endl;

4.reserve()

作用:将字符串容量调整到n,如果n大于原先的容量则扩充到n(可能比n大)。

用法:

string str("Hello World");
size_t i = str.capacity();
str.reserve(20);
size_t j = str.capacity();
cout << i <<' '<<j<< endl;

 5.clear()

作用:清除字符串的内容,将该字符串变成空字符串。

用法:

string str("Hello World");
str.clear();
cout << str << endl;

6.empty()

作用:判断字符串是否为空,如果为空则返回true,否则返回false。 

用法:

string str("Hello World");
cout << str.empty() << endl;
str.clear();
cout << str.empty() << endl;

四、operator[]

作用:可以将字符串像数组一样进行下标访问。 

用法:

string str("Hello World");
cout << str[4] << endl;

 五、修饰符(Modifiers

1.operator+=

作用:在string对象的尾部插入一个字符、字符串、或者一个string对象。

用法:

string s1("Hello World"), s2("Hello World"), s3("Hello World");
s1 += s2;
s2 += "world";
s3 += 'Q';
cout << s1 << endl << s2 << endl << s3 << endl;

2.append()和push_back()

作用:功能上大差不差都是插入字符或者字符串。

3.insert()

作用:在字符串pos指向的字符的前面插入字符或者字符串。 

用法:

string str("Hello World");
str.insert(str.begin(), 'Q');
cout << str << endl;

4.erase()

作用:在字符串pos指向的字符后面开始向后删除len个字符。

用法:

string str("Hello World");
str.erase(5, 5);
cout << str << endl;

5.replace() 

作用:将字符串pos指向的字符后len个字符替换成字符串str。

用法:

string str("Hello World");
str.replace(str.find('e'), 6, "Q");
cout << str << endl;

6.swap()

 

作用:将一个字符串与另一个字符串进行交换。 

string s1("qqqqq"), s2("wwww");
cout << s1 << "   " << s2 << endl;
s1.swap(s2);
cout << s1 << "   " << s2 << endl;

六、find()和rfind()

1.find()

作用:从字符串pos指向的字符开始向后找字符c或者字符串s,并返回第一次找到的元素下标,如果没找到则返回npos。

用法:

string str("Hello World");
cout << str.find('r') << endl;
cout << str.find('q') << endl;

2.rfind()

作用:和find几乎相同,只不过rfind是 从后往前遍历,也就是返回最后一个与之对应的元素的下标,如果未匹配则返回npos。

用法:

string str("Hello World Hello World ");
cout << str.rfind('r') << endl;

七、substr()和compare()

1.substr()

作用:将字符串pos指向的字符开始向后截取len个字符并将其赋值给一个新构造的对象。

 用法:

string str("Hello World");
string s = str.substr(5, 6);
cout << s << endl;

2.compare()

 作用:将两字符串进行比较返回整数。

 用法:

string str("Hello World");
string s("qweffj");
cout << str.compare(s) << endl;

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

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

相关文章

20241024拿掉飞凌OK3588-C的开发板linux R4启动时的LOGO

20241024拿掉飞凌OK3588-C的开发板linux R4启动时的LOGO 2024/10/24 14:20 缘起&#xff1a;公司的产品可能要卖到北边/敏感地区。 开机肯定有飞凌的LOGO。 要么是公司的LOGO&#xff0c;要么是中性的&#xff1a;全黑色或者是一朵花【稍微有点品味】。 所以要拿掉uboot/Kernel…

汽车级DC-DC转换器英飞凌TLF35584

上汽荣威都在用的汽车级DC-DC转换器英飞凌TLF35584 今天平台君从IPBrain数据库中给大家带来的一款由Infineon(英飞凌)推出的一款多路输出安全电源芯片,具备高可靠性和安全性。适用于汽车电子系统中的多种应用场景,如车身控制、安全气囊、防抱死制动系统,电子稳定控制系统等。…

Unity2D 人物爬楼梯

unity3d 中 实现 2d角色爬梯子功能。_哔哩哔哩_bilibiliunity3d 中 实现 2d角色爬梯子功能。, 视频播放量 2598、弹幕量 3、点赞数 28、投硬币枚数 18、收藏人数 83、转发人数 19, 视频作者 Fss1975, 作者简介 &#xff0c;相关视频&#xff1a;寻路算法 在unity3d 中的演示&am…

repo将每个仓库回退到第一个commit的状态

文章目录 1. 获取所有仓库的列表2. 回退每个仓库到第一个 commit3. 确认状态注意事项 在使用 repo 和 git 管理 AOSP 代码时&#xff0c;如果你想将每个仓库都回退到其第一个 commit 的状态&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 获取所有仓库的列表 首先&…

Windows Python安装和配置教程

文章目录 一&#xff0c;下载方式&#xff08;一&#xff09;官网下载注&#xff1a;下载选项说明注&#xff1a;查看本机操作系统位数步骤 &#xff08;二&#xff09;网盘下载 二&#xff0c;安装三&#xff0c;测试安装效果&#xff08;一&#xff09;检测安装配置&#xff…

新书速览|Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)

《SpringSpring MVCMyBatis从零开始学&#xff08;视频教学版&#xff09;&#xff08;第3版&#xff09;》 1 本书内容 SSM是当前使用广泛的Java Web开发框架。《SpringSpring MVCMyBatis从零开始学&#xff08;视频教学版&#xff09;&#xff08;第3版&#xff09;》由浅入…

【福建医科大学附属第一医院-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

浅谈BIM+GIS在管廊机电监控与运维管控系统中的应用

文&#xff1a;安科瑞郑桐 摘要&#xff1a;本文提出了一种城市综合管廊监控与报警集成管控平台的架构&#xff0c;并对以BIMGIS为核心的系统功能进行了研究和分析&#xff0c;通过GIS实现对管廊整体及设备设施的全局定位及管理&#xff0c;利用BIM实现对管廊设备的空间定位&a…

第6篇:无线与移动网络

目录 引言 6.1 无线网络的基础概念 6.2 无线局域网&#xff08;WLAN&#xff09;与IEEE 802.11 6.3 蓝牙与无线个域网&#xff08;WPAN&#xff09; 6.4 无线城域网&#xff08;WMAN&#xff09;与WiMax 6.5 ZigBee与智能家居 6.6 移动蜂窝网络&#xff08;3G/4G/5G&…

SpringColoud GateWay 核心组件

优质博文&#xff1a;IT-BLOG-CN 【1】Route路由&#xff1a; Gateway的基本构建模块&#xff0c;它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真&#xff0c;则匹配到该路由。 Route路由-动态路由实现原理&#xff1a; 配置变化Apollo 服务地址实例变化…

AMD XILINX 20nm器件价格上调25%

随着市场回暖&#xff0c;台积电也在调整价格策略&#xff0c;近期台积电上调了20nm的出厂价格。 据相关消息显示&#xff0c;AMD为了保障持续的供货和服务&#xff0c;也计划将20nm器件的价格统一上调25%&#xff0c;预计将于11月发布正式的涨价通知&#xff0c;并于2025年Q1开…

七,Linux基础环境搭建(CentOS7)- 安装Scala和Spark

Linux基础环境搭建&#xff08;CentOS7&#xff09;- 安装Scala和Spark 大家注意以下的环境搭建版本号&#xff0c;如果版本不匹配有可能出现问题&#xff01; 一、Scala下载及安装 Scala是一门多范式的编程语言&#xff0c;一种类似java的编程语言&#xff0c;设计初衷是实现…

基于Java+SpringBoot+Vue的宠物咖啡馆平台的设计与实现

基于JavaSpringBootVue的宠物咖啡馆平台的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#…

ubuntu编译kaldi和vosk

文章目录 前言一、开源框架的选取二、kaldi编译三、编译vosk方案一方案二 前言 由于工作需要语音识别的功能&#xff0c;环境是在linux arm版上&#xff0c;所以想先在ubuntu上跑起来看一看&#xff0c;就找了一下语音识别的开源框架&#xff0c;选中了vosk这个开源库&#xf…

微软:全球每天网络攻击超6亿次

《2024年微软数字防御报告》揭示了一个复杂的全球网络安全格局&#xff0c;每天发生超过6亿次网络攻击。报告强调了勒索软件、网络钓鱼和身份泄露事件的增加&#xff0c;以及网络犯罪团伙和国家行为者之间的合作。它强调了人工智能在攻击和防御中的重要作用&#xff0c;敦促组织…

基于SpringBoot的“高校校园点餐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校校园点餐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台首页功能界面图 用户注册、登录界面图 我…

Java中的程序、进程、线程、并行和并发

程序 一段静态的代码进程 ① 正在内存中运行的“程序” ② 是操作系统调度和分配资源的最小单位线程 ① 进程可进一步细化为线程&#xff0c;是程序内部的一条执行路径&#xff0c;一个进程中至少有一个线程 ② 线程是CPU调度和执行的最小单位 ③ 多个线程共享相同的内存单元&a…

用docker Desktop 下载使用thingsboard/tb-gateway

1、因为正常的docker pull thingsboard/tb-gateway 国内不行了&#xff0c;所以需要其它工具来下载 2、在win下用powershell管理员下运行 docker search thingsboard/tb-gateway 可以访问到了 docker pull thingsboard/tb-gateway就可以下载了 3、docker Desktop就可以看到…

EasyExcel_动态表头的导入导出

文章目录 前言一、EasyExcel二、使用步骤1.引入jar包2.数据准备2.1 数据库 3.方法实例3.1 无实体的导入3.1.1 Controller3.1.2 Service3.1.3 Listener3.1.4 Utils3.1.5 无实体导入数据返回说明 3.2 无实体的导出3.2.1 无实体导出数据(这里只贴出关键代码,Service代码处理)3.2.2…

凸优化学习

认为学习凸优化理论比较合适的路径是&#xff1a; 学习/复习线性代数和&#xff08;少量&#xff09;高等数学的知识。 实际上&#xff0c;凸优化理论综合使用了线性代数和微积分的相关知识&#xff0c;比如方向导数&#xff0c;雅克比矩阵&#xff0c;海森矩阵&#xff0c;KKT…