C++---string类常见接口

介绍

 string类详情===>>>https://cplusplus.com/reference/string/string/?kw=string

1. string是表示字符串的字符串类(感觉就像一个动态的字符数组)
2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>string;
4. 不能操作多字节或者变长字符的序列。
在使用string类时,必须包含#include头文件以及using namespace std;

string类的常用接口说明

1 string类常用构造函数

1.1 string()

定义一个空字符串,直接使用就行。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1;
    return 0;
}

1.2 string(const char* s)

#include <iostream>
#include <string>
using namespace std;
int main()
{

    const char *ch="hello world";
    string s1("hello world");
    string s2(ch);
    
    return 0;
}

1.3 string(size_t n, char c)

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s(3, 'a'); //3个a字符
    cout << s;
    return 0;
}

1.4 string(const string&s)

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s(3, 'a');
    string s1 = s;//定义变量时候的=就是拷贝构造
    cout << s;

    string s2;
    s2 = s;//定义完了之和的=是调用的运算符重载operator=()

    return 0;
}

2 string类对象的容量操作

2.1 size/length

	string s1("hello world");
	string s2("hello");
	cout << s1.size() << endl; //11
	cout << s2.length() << endl; //5

    //size和length本质没啥区别,只是谁先被创造出来的差别而已

2.2 capacity

string s1("hello world");
cout << s1.capacity() << endl; //15

//实际容量一般比capacity多一个,用于存储'\0'

capacity与size的区别:capacity是容量,表示总共最多能装多少个字符,而size是表示字符串的有效字符的数量,则capacity>=size。

在实际扩容中,为了提高效率,capacity的增长是按照一定比率增长的,在VS中,大概为1.5倍增长。

2.3 clear

string s1("hello world");
cout << s1  << endl; //hello world
s1.clear();
cout << s1  << endl; //空

2.4 reserve

string s;//创建一个s空字符串
s.reserve(100);//提前为 s 开辟100个空间
cout<<s.size()<<endl;//0
cout << s.capacity() <<endl;//111

 reserve只会开辟空间,并不会改变字符串有效字符内容。reserve开辟的空间要比string底层空间要大,如果传入参数小于string底层空间大小的话则为无效开辟。

2.5 resize

两种方式:

resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字
符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的
元素空间。

注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大
小,如果是将元素个数减少,底层空间总大小不变。

3 string类对象的访问和遍历

3.1 operator[] 

for (int i = 0; i < s3.size(); i++)
	{
		s3[i] += 2;
	}

[]的运算符重载,可以直接将string类对象当数组一样用下标访问。

3.2 begin+ end

//迭代器
	string::iterator it = s3.begin();
	while (it != s3.end())//写
	{
		*it -= 2;
		it++;
	}
	it = s3.begin();//置为起点
	while (it != s3.end())//读   end为数组末尾的下一个位置
	{
		cout << *it << " ";
		it++;
	}

begin获取一个字符的迭代器 + end获取最后一个字符下一个位置的迭代器

3.3 rbegin + rend

string s1("hello world");
	string::reverse_iterator  rit = s1.rbegin();
	while (rit != s1.rend())
	{
		cout << *rit << " ";
		rit++;
	}
	cout << endl;

4 string类对象的修改操作

4.1 push_back

string s;
s.push_back('c');

在字符串后插入c

4.2 append

string s;
s.append("123");

在字符串后追加一个字符串

4.3 operator+=

string s;
s += '8';
s += "sda";
//s: 8sda

在字符串后追加字符串str

在string尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c'三种的实现方式差不多,一般情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串。

4.4 insert 

string s("hello world");
s.insert(s.begin(), 's');
//s: shello world

在下标为pos之前插入字符串。

4.5 erase

string s("xxxhello world");
s.erase(0,3);//前面的 0 是位置,后面的3是需要删除的字符个数
cout << s << endl; //hello world

从某个位置开始删除几个字符,如果字符不够删,则有多少删多少

4.6 c_str

string s1("sdjsd");
	const char* str = s1.c_str();
	while (*str)
	{
		cout << *str << " ";
		str++;
	}
	cout << endl;

返回首地址。

4.7 find + npos

string s("hello world");
int pos = s.find(' ');//找到‘ ’的位置
cout << s.substr(pos+1)<<endl;//world
int pos1 = s.find('l', pos);//从pos开始找l
cout << s.substr(pos1)<<endl;//ld

4.8 rfind

int pos2=s.rfind('l');
cout << s.substr(pos2)<<endl;
int pos3 = s.rfind('l', pos2-1);
cout << s.substr(pos3)<<endl;

rfind和find类似,find是从往右找,rfind是从右往左找。

4.9 substr

string s("hello world");
int pos = s.find(' ');//找到‘ ’的位置
cout << s.substr(pos+1)<<endl;//world
int pos1 = s.find('l', pos);//从pos开始找l
cout << s.substr(pos1)<<endl;//截取pos1开始到最后的字符段

在str中从pos位置开始,截取n个字符,然后将其返回。

5 string类非成员函数

5.1 operator+

尽量少用,因为传值返回,导致深拷贝效率低

5.2 operator>>

输入符重载

5.3 operator<<

输出运算符重载

5.4 getline

getline与cin类似但不相同,cin输入时遇到空格或者遇到换行符就会停止读入,而getline不会。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

突破瓶颈:Java并发编程的最佳实践与技巧,你了解了吗?

文章目录 1 什么是 Executor 和 ExecutorService &#xff1f;这两个接口有什么区别&#xff1f;2 java.util.concurrent 标准库中 ExecutorService 的可用实现是什么 &#xff1f;3 什么是 Java 内存模型&#xff08; JMM &#xff09;&#xff1f;描述下其目的和基本思想4 JM…

工业相机飞拍的原理及工作原理

工业相机飞拍&#xff08;或称为工业高速相机飞行拍摄&#xff09;是一种利用高速图像捕捉技术和精密运动控制系统进行高效图像采集的先进技术。它广泛应用于工业检测、质量控制和自动化生产等领域。本文将详细探讨工业相机飞拍的原理及其工作方式。 一、工业相机飞拍的基本概…

插件第一版基本完成

什么插件 Command Assist 经过多次修改和界面优化&#xff0c;Mac和Windows的适配&#xff0c;最终形态长这样&#xff1a; 欢迎下载使用&#xff0c;反馈问题和建议~ 主要作为日常开发的手边工具&#xff0c;功能不复杂&#xff0c;核心就是常用命令的管理&#xff0c;包括&…

35天学习小结

距离上次纪念日&#xff0c;已经过去了35天咯 算算也有5周了&#xff0c;在这一个月里&#xff0c;收获的也挺多&#xff0c;在这个过程中认识的大佬也是越来越多了hh 学到的东西&#xff0c;其实也没有很多&#xff0c;这个暑假多多少少还是有遗憾的~ 第一周 学习了一些有…

Good Die与Inked Die 介绍

Good Die与Inked Die在半导体行业中,特别是与闪存芯片相关的领域,是两个重要的概念,它们代表了芯片质量的不同等级。 Good Die 定义: Good Die,即良品颗粒,是指在晶圆生产过程中,经过严格测试后被认定为符合原厂规格要求、质量良好的芯片。这些芯片在切割、封装等后续工…

第15-02章:理解Class类并获取Class实例

我的后端学习大纲 我的Java学习大纲 1、Java反射机制原理图&#xff1a; 源代码通过Javac编译得到字节码文件&#xff0c;当我执行到new一个对象的时候&#xff0c;字节码文件会通过ClassLoader被加载&#xff0c;然后得到一个Class类对象&#xff0c;存放在堆中&#xff0c;加…

Redis搭建集群

功能概述 Redis Cluster是Redis的自带的官方分布式解决方案&#xff0c;提供数据分片、高可用功能&#xff0c;在3.0版本正式推出。 使用Redis Cluster能解决负载均衡的问题&#xff0c;内部采用哈希分片规则&#xff1a; 基础架构图如下所示&#xff1a; 图中最大的虚线部分…

Linux的历史,版本,Linux的环境安装、简单学习4个基本的Linux指令、创建普通用户等的介绍

文章目录 前言一、Linux的历史二、版本三、Linux的环境安装1. 腾讯云服务器的申请2. xshell的安装与使用 四、 简单学习4个基本的Linux指令1. ls2. pwd3. mkdir4. cd 五、创建普通用户总结 前言 Linux的历史&#xff0c;版本&#xff0c;Linux的环境安装、简单学习4个基本的Li…

PHP随时随地预订民宿酒店预订系统小程序源码

随时随地预订&#xff0c;民宿酒店预订系统让旅行更自由&#xff01; &#x1f30d; 说走就走的旅行&#xff0c;从预订开始 旅行&#xff0c;总是让人心生向往&#xff0c;但繁琐的预订流程却常常让人望而却步。不过&#xff0c;现在有了“随时随地预订民宿酒店预订系统”&am…

RK3588九鼎创展方案在Arm集群服务器的项目中的应用分析​​

RK3588九鼎创展核心板&#xff0c;搭载8核瑞芯微3588芯片&#xff0c;具备高性能、低功耗以及强大的多媒体和AI处理能力。在Arm集群服务器项目中&#xff0c;RK3588系列芯片用有明显的性能优势。本文将结合RK3588芯片的性能特征以及九鼎创展的项目经验来分析RK3588在集群服务器…

【JAVA入门】Day34 - Stream流

【JAVA入门】Day34 - Stream流 文章目录 【JAVA入门】Day34 - Stream流一、Stream 流的作用和使用步骤1.Stream流的创建&#xff0c;数据的添加2. Stream流的中间方法3. Stream流的终结方法 Stream 流有什么作用&#xff1f;我们看一个例子&#xff1a; 【练习】需求&#xff…

swift qwen2-vl推理及加载lora使用案例

参考: https://swift.readthedocs.io/zh-cn/latest/Instruction/LLM%E5%BE%AE%E8%B0%83%E6%96%87%E6%A1%A3.html#%E5%BE%AE%E8%B0%83%E5%90%8E%E6%A8%A1%E5%9E%8B https://blog.csdn.net/weixin_42357472/article/details/142150209 SWIFT支持300+ LLM和50+ MLLM(多模态大模型…

利用高德+ArcGIS优雅获取任何感兴趣的矢量边界

荷花十里&#xff0c;清风鉴水&#xff0c;明月天衣。 四时之景不同&#xff0c;乐亦无穷尽也。今天呢&#xff0c;梧桐君给大家讲解一下&#xff0c;如何利用高德地图&#xff0c;随机所欲的获取shp边界数据。 文章主要分成以下几个步骤&#xff1a; 首先搜索你想获取的矢量…

发送成绩的app或小程序推荐

老师们&#xff0c;新学期的第一次月考马上开始&#xff0c;是不是还在为如何高效、便捷地发布成绩而头疼呢&#xff1f;别担心&#xff0c;都2024年了&#xff0c;我们有更智能的方式来解决这个问题&#xff01; 给大家安利一个超级实用的工具——易查分小程序。这个小程序简…

element ui form 表单出现英文提示的解决方案

场景再现&#xff1a; 在使用 form 表单的时候&#xff0c;一般都需要对表单元素进行验证&#xff0c;错误就出现在了这里&#xff0c;除了配置的错误信息&#xff0c;还会出现一个 英文校验提示&#xff0c;如下图&#xff1a; 解决方案 出现的原因是在el-form-item中使用…

把设计模式用起来(3)用不好的原因之时机不对

上一篇&#xff1a;《把设计模式用起来&#xff08;3&#xff09;——用不好的原因 之 实践不足》https://blog.csdn.net/nanyu/article/details/141939342 本篇继续讲设计模式用不好的常见原因&#xff0c;这是第二个&#xff1a;使用设计模式的时机不对。 二、时机不对 这里…

望繁信科技与华恒生物正式签约,共同开启流程数字化转型新篇章

近日&#xff0c;上海望繁信科技有限公司&#xff08;简称“望繁信科技”&#xff09;与安徽华恒生物科技股份有限公司&#xff08;简称“华恒生物”&#xff09;成功举行了战略合作签约仪式。作为全球领先的合成生物制造企业&#xff0c;华恒生物将引入望繁信科技的流程智能管…

3分钟带你了解什么是数据目录

什么是数据目录&#xff1f; 数据目录&#xff0c;顾名思义就是“数据的目录”。这里的“数据”指的是元数据。数据目录通过管理这些元数据&#xff0c;形成一个可用的数据清单&#xff0c;使数据开发者、数据分析师等人员能够通过查阅和搜索等操作&#xff0c;快速找到所需的数…

4052A/4052B/4052C/4052D/4052E/4052F/4052G /4052H信号/频谱分析仪

4052A/4052B/4052C/4052D/4052E/4052F/4052G /4052H信号/频谱分析仪 苏州新利通 Ceyear 4052具备出色的测试动态范围、相位噪声、幅度精度和测试速度&#xff0c;具备频谱分析、I/Q分析、实时频谱分析、瞬态分析、矢量信号分析、脉冲分析、音频分析等丰富的测试功能。 Ceyear…

长沙自闭症寄宿学校推荐,为孩子开启光明未来

在长沙这座历史悠久而又充满活力的城市中&#xff0c;自闭症儿童的成长与教育问题牵动着无数家庭的心。家长们渴望为孩子找到一所能够提供专业康复、温馨关怀与全面教育的学校&#xff0c;为他们的未来铺设一条光明之路。虽然本文起始于长沙的期盼&#xff0c;但我们的目光已跨…