string类的使用(上)

news2024/9/30 10:47:31

目录

1.string类的概念

2.string的构造函数(实现初始化)

3.对string类容量获取和操作

4.string类对象的访问和遍历

4.1operator[]

4.2begin和end

4.3 rbegin 和 rend 

4.4迭代器分类

4.5范围for(自动实现++遍历)

5.string类对对象的修改和查找

5.1operator+=

5.2c_str

5.3npos和find 

 5.4 rfind

5.5substr

5.6 insert和erase

6.其他函数:

6.1operator+

6.2getline

6.3relational operator


1.string类的概念

上面是c++官方对string类的描述,我们不难发现string类的底层其实是:basic_string模版以char类型实例化出的结果。它实际上是以可动态增长的数组提供存储,并提供许多接口,实现多字符串的多种操作。 

2.string的构造函数(实现初始化)

string类提供了多种构造函数。但我们在实际中多用到的是 默认构造函数,拷贝构造函数,以字符串构造函数。 

string st1;//默认构造(重要
string st2("abcd");//带参构造(重要
string st3(st2);//拷贝构造(重要
string st4(st2, 2, 2);//子字符串构造(了解
string st5(st2, 3);//顺序构造(了解
string st6(4, 48);//填充构造(了解
string st7(st2.begin(), st2.begin() + 3);//范围构造(了解

3.对string类容量获取和操作

其中的size和length是同样的效果,capacity是返回空间容量, empty是判空.

clear是清空字符串(但是capacity不会变,只是size = 0)

reserve是申请改变容量(只有当n>capacity时,才会申请成功),当n<=capacity时都没有变化

resize:将字符串大小调整为 n 个字符的长度。如果 n 小于当前字符串长度,则当前值将缩短为其前 n 个字符,并删除第 n个字符以外的字符。如果 n 大于当前字符串长度,则通过在末尾插入所需数量的字符来扩展当前内容,以达到 n 的大小。如果指定了 c,则新元素将初始化为 c 的副本,否则,它们是值初始化字符(空字符)

4.string类对象的访问和遍历

4.1operator[]

string类已经完成了对[]的重载,我们用 name[pos]即可访问pos位置的字符

4.2begin和end

begin和end的返回参数需要用迭代器来接收,在string类里,迭代器(string::iterator)就像指针一样,但它不一定是指针。begin返回的首字符的指针,end返回的是末尾字符的后一个字符的指针。

我们用迭代器实现以下string的遍历

	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		cout << *it << " ";
		++it;
	}

4.3 rbegin 和 rend 

rbegin rend 与begin end类似,只不过他们的指向位置不同,正向方向不同

实现反向遍历

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

4.4迭代器分类

4.5范围for(自动实现++遍历)

string s1("cada");
for (auto i : s1)
{
	cout << i << " ";
}

5.string类对对象的修改和查找

5.1operator+=

operator+= 可以实现push_back(在string后加单字符)和append(是string后加字符串)的功能

5.2c_str

将string对象转换为c语言中的const char*格式,以便使用strcpy等针对字符串的函数 

我们可以在这里区分下输出字符串和string的区别:

 cout字符串的逻辑是输出到字符串的末尾\0,而cout<<string是把string类的所有输出,不管有没有\0.

5.3npos和find 

npos是属于string类中的静态变量,使用string::npos,其代表的是size_t类型的-1,也就是size_t

的正向最大值。

find(char c,size_t pos = 0)是从pos位置找字符c或者字符串s出现的位置,如果找到就返回其位置出,找不到就返回npos。 其还有许多如下用法

 5.4 rfind

rfind是从pos位置向前找字符c或者字符串s,返回位置,如果没找到就返回npos,其他用法如下

5.5substr

从string中的pos位置开始,截取n个字符,返回值

 5.6例:分离URL中的协议,域名和资源名称

void trennen_url(const string& url)
{
	size_t pos1 = url.find(':');
	if (pos1 != string::npos)
	{
		cout << url.substr(0, pos1) << endl;
	}
	size_t pos2 = pos1 + 3;
	size_t pos3 = url.find('/', pos2);
	if (pos3 != string::npos)
	{
		cout << url.substr(pos2, pos3 - pos2) << endl;
		cout << url.substr(pos3 + 1);
	}
}

5.6 insert和erase

insert是向pos位置插入某个字符串或者string,所有用法如下(如果用迭代器是只能插入单字符且是正向)

erase 是从pos位置,删除n个长度

6.其他函数:

6.1operator+

operator+和operator+=的区别是前面的不会改变string,而后面的会改变string,但是他们的输出都是相同的。

6.2getline

当输入的string有space时,用scanf或者cin只能获取一部分,因为这两种遇到space或者换行就会停止输入,而getline只有换行时停止输入。一般的用法是getline(cin,str);其中cin是输入流

6.3relational operator

string还提供了互相比较大小的方法,其与c语言中的字符串比较大小相似,不做过多描述

扩展阅读:

ascii是一种值和字符的映射关系,0-255个值映射了许多字符。ascii是1个字符为一个编码

utf8和window gbk 是值和中文的映射关系。UTF-8使用1~4字节为每个字符编码,gabk为2字节为一个字符编码

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

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

相关文章

打造高效舒适的气膜网球馆—轻空间

气膜网球馆&#xff0c;作为现代运动设施的创新选择&#xff0c;其成本构成涵盖多个重要方面&#xff0c;确保为运动者提供最佳体验。 一、膜材选择 膜材是气膜网球馆的核心&#xff0c;品质不同直接影响成本。高品质膜材不仅增强了耐用性&#xff0c;也能有效阻挡外界气候影响…

【展会回顾】阿尔泰科技2024上海工博会精彩瞬间,圆满收官 ,感恩遇见 ,共赴新程!

9月24日&#xff0c;以“工业聚能 新质领航”为主题的第二十四届中国国际工业博览会&#xff08;以下称“工博会”&#xff09;在国家会展中心&#xff08;上海&#xff09;举办&#xff0c;展示了一批代表中国工业领域的最新技术与前沿成果。 本届工博会的主题“工业聚能&…

Pycharm 本地搭建 stable-diffusion-webui

一、下载工程源码 Github官方连接 https://github.com/AUTOMATIC1111/stable-diffusion-webui 二、Pycharm打开工程 1、设置环境 文件-设置-项目-Python解析器-添加解释器-添加本地解释器 Conda环境-创造新环境-Python版本3.10 注意一定要选择Python3.10版本&#xff0c;否…

uni-app canvas文本自动换行

封装 支持单行文本超出换行。多行文本顺位排版 // 填充自动换行的文本function fillFeedText({ctx, text, x, y, maxWidth, lineHeight, color, size}) {// 文本配置ctx.setFontSize(size);ctx.setFillStyle(color);// 计算文本换行宽高&#xff0c;换行逻辑const words text…

JavaScript中的函数定义

第8章 函数 在JS中函数即对象&#xff0c;程序可以随意操控他们。可以把函数赋值给变量&#xff0c;或者作为参数传递给其他函数。因为函数就是对象&#xff0c;所以可以给他们设置属性&#xff0c;甚至调用他们的方法。 JavaScript的函数可以嵌套在其他函数中定义&#xff0…

初识C语言(四)

目录 前言 十一、常见关键字&#xff08;补充&#xff09; &#xff08;1&#xff09;register —寄存器 &#xff08;2&#xff09;typedef类型重命名 &#xff08;3&#xff09;static静态的 1、修饰局部变量 2、修饰全局变量 3、修饰函数 十二、#define定义常量和宏…

5250 Fantasy RPG Icons Pack 幻想RPG游戏图标合集

这里是集合 - 幻想RPG图标 它包括50个主题图标。文件:PNG。 在档案中,带有背景的图标(512512)和没有背景的单个对象(大小取决于主题)。仅具有背景技能的技能。 2024年2月更新(+500个图标): RPG蔬菜图标; RPG游戏中的蜘蛛战利品图标; RPG海战战利品图标; RPG怪物战利…

匿名管道 Linux

管道 首先自己要用用户层缓冲区&#xff0c;还得把用户层缓冲区拷贝到管道里&#xff0c;&#xff08;从键盘里输入数据到用户层缓冲区里面&#xff09;&#xff0c;然后用户层缓冲区通过系统调用&#xff08;write&#xff09;写到管道里&#xff0c;然后再通过read系统调用&…

新手上路:Anaconda虚拟环境创建和配置以使用PyTorch和DGL

文章目录 前言步骤 1: 安装 Anaconda步骤 2: 创建新的 Anaconda 环境步骤 3: 安装最新版本的 PyTorch步骤 4: 安装特定版本的 PyTorch步骤 5: 安装最新版本的 DGL步骤 6: 安装特定版本的 DGL步骤 7: Pycharm中使用虚拟环境解释器第一种情况&#xff1a;创建新项目第二种情况&am…

Linux Shell编程最重要的十个核心概念

对于每个Linux学习者而言&#xff0c;Shell编程的重要性不言而喻。它是连接用户与系统操作的桥梁&#xff0c;能够培养命令行的熟练度和解决问题的能力。通过Shell编程&#xff0c;学习者可以深入理解系统管理和日常任务自动化的精髓&#xff0c;提高工作效率。此外&#xff0c…

应急响应(1)-同事电脑

一、现象 重要时间节点&#xff0c;同事反馈桌面有鼠标移动、随机断网&#xff1b;发现登录账户多了一个&#xff0c;由于电脑长时间没有更改过密码&#xff0c;导致忘记密码无法登录。随机联系进行应急处理。 二、排查 2.1、密码重置/删除 由于同事忘记密码导致无法进行登录…

Linux文件系统入门详解-总结大章

我们先看一张图&#xff1a; 这张图大体上描述了 Linux 系统上&#xff0c;应用程序对磁盘上的文件进行读写时&#xff0c;从上到下经历了哪些事情。 这篇文章就以这张图为基础&#xff0c;介绍 Linux 在 I/O 上做了哪些事情。 文件系统 什么是文件系统 文件系统&#xff0…

EKF学习笔记

扩展卡尔曼滤波&#xff0c;也就是EKF&#xff0c;常用于在动态系统中对状态的估计。比如&#xff0c;在机器人领域&#xff0c;EKF则常常用于对状态&#xff08;位置&#xff0c;方向&#xff09;的估计&#xff0c;也就是我们常说的数据融合&#xff0c;结合运动模型和观测数…

vscode使用yarn 启动vue项目记录

第一次启动yarn项目&#xff0c;这个是公司的老项目&#xff0c;遇到了点问题&#xff0c;记录下首先是我一般使用的是npm命令&#xff0c;所以没有安装yarn vscode安装yarn vscode进入到该项目文件夹下&#xff0c;输入命令&#xff1a;npm install -g yarn 安装成功后&…

河南人社厅:注册满两年可按条件认定副高

河南省工程系列建筑专业中高级职称 申报评审标准 总则 一、为培养造就高素质、社会化的工程建设领域专业技术人才队伍&#xff0c;充分发挥工程建设领域专业技术人才在科技发展和经济建设中的作用&#xff0c;推动技术创新、科技成果转化和实现高新技术产业化&#xff0c;根据…

CSS给一行按钮统一设置间隔

使用css的&#xff0b;&#xff08;相邻兄弟选择器&#xff09;&#xff0c;找到指定元素后面的相邻元素。 <div class"btn-list"><button class"btn">按钮1</button><button class"btn">按钮2</button><butto…

Arthas memory(查看 JVM 内存信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.11 memory&#xff08;查看 JVM 内存信息&#xff09;举例1&#xff1a;查看 JVM 内存信息 本人其他相关文章链接 二、命令列表 2.1 jvm相关命令 2.1.11 memory&#xff08;查看 JVM 内存信息&#xff09; 基本用法&#xff1a; mem…

第一讲-环境安装

PyCharm安装 官网下载 https://www.jetbrains.com/pycharm/ 点击Download跳转到下载界面,会有专业版跟社区版两个选择,专业版需要购买,可自行在淘宝上买个激活码。一般开发社区版够用了。 这是专业版: 这是社区版:

WinRAR技巧:如何给多个压缩包设置同一个密码

RAR压缩包是大家经常使用的文件&#xff0c;并且可以进行加密&#xff0c;也是一种文件加密方式&#xff0c;那么当你有很多文件都需要压缩加密&#xff0c;b并且想要设置同一个密码&#xff0c;防止以后忘记密码&#xff0c;该如何高效的完成这个工作呢&#xff1f;今天分享如…

vue2中使用tailwindCss 详细教程

1、先看官方文档&#xff1a;https://www.tailwindcss.cn/ 2、先安装&#xff1a;npm install -D tailwindcss ---------------通过 npm 安装 tailwindcss&#xff0c;然后创建你自己的 create your tailwind.config.js 配置文件。 npm install -D tailwindcss 3、初始化文件…