C++中string类的常用函数

news2024/11/24 2:37:16

文章目录

  • 默认成员函数
    • 常见构造函数(constructor)
  • string类的容量操作
    • size()
    • empty()
    • capacity()
    • reserve()
    • clear()
    • resize()
  • string类对象的访问及遍历操作
    • 重载 [ ]
    • begin()
    • end()
    • begin() + end() 遍历字符串
    • rbegin()
    • rend()
    • rbegin() + rend()反向遍历字符串
    • C++11范围for
  • string类对象修改操作
    • operator+=
  • 字符串操作
    • c_str()
    • find
    • rfind()
    • substr()
    • 常量成员
    • npos
    • 非成员函数重载
    • getline()

引言:在C语言中对于字符串的一些操作,例如在字符串末尾增加字符,对字符串拷贝等,我们可以通过调用库中函数来完成这些操作,在C++中,我们把这些常规操作封装成了string类,可以通过类对象直接调用这些函数,使得更加符合了面向对象的思想。

默认成员函数

在这里插入图片描述

常见构造函数(constructor)

在这里插入图片描述

int main()
{
	string s1;//无参构造初始化为空字符串
	string s2("abcdefg");//用C-string来构造string类对象
	string s3(s2);//拷贝构造函数
	string s4(5, '*');//string类对象中包含n个字符c
	return 0;
}

string类的容量操作

在这里插入图片描述

size()

作用:返回字符串的有效字符长度

	string s6 = "abcdefg";
	int size = s6.size();//返回7

empty()

作用:检测字符串是否为空串,是返回true,否则返回false

	string s7;
	string s8 = "abcdef";
	s7.empty();//返回true
	s8.empty();//返回false

capacity()

作用:返回空间总大小

在VS2019中默认给string对象开辟15字节,并且以原容量的二倍进行扩容

	string s;
	cout << s.capacity() << endl;//输出15
	s += "abcdefghijklmnop";
	cout << s.capacity() << endl;//输出31

在vim中有多少字符空间就有多大

	string s;
	cout << s.capacity() << endl;//输出0
	s += "abcdefghijklmnop";
	cout << s.capacity() << endl;//输出16

reserve()

作用:为字符串预留空间
注意区分:reserve是保留,预留 reverse是翻转

在VS2019中

	string s1 = "abc";
	cout << s1.capacity() << endl;//输出15
	s1.reserve(100);
	cout << s1.capacity() << endl;//输出111

在vim中

	string s1 = "abc";
	cout << s1.capacity() << endl;//输出3
	s1.reserve(100);
	cout << s1.capacity() << endl;//输出100

clear()

在这里插入图片描述

作用:清空有效字符
注意:clear()函数没有返回值
VS2019中

	string s9 = "abcdef";
	cout << s9.capacity() << endl;//返回15
	cout<<s9.empty()<<endl;//返回false
	s9.clear();//清空字符串
	cout << s9.capacity() << endl;//返回15
	cout << s9.empty() << endl;//返回true

vim中

	string s9 = "abcdef";
	cout << s9.capacity() << endl;//返回6
	cout<<s9.empty()<<endl;//返回false
	s9.clear();//清空字符串
	cout << s9.capacity() << endl;//返回6
	cout << s9.empty() << endl;//返回true

可以看到在清除字符后字符串的原有容量并不会减小,size会变为0

resize()

作用:调整大小,将有效字符的个数改成n个,如果有多出的空间用字符c填充
在这里插入图片描述

	string s3 = "abcdefg";
	s3.resize(4);//缩小
	cout << s3 << endl;//输出abcde
	string s4 = "abcde";
	s4.resize(10, 'd');//扩大
	cout << s4 << endl;//输出abcdeddddd//多出来5个字节用字符‘d’来进行填充
	//扩大时默认使用0来进行填充

string类对象的访问及遍历操作

在这里插入图片描述
在这里插入图片描述

重载 [ ]

	string s4 = "abcdefg";
	for (int i = 0; i < s4.size(); i++)
	{
		cout << s4[i] << " ";
	}
	cout << endl;

begin()

在这里插入图片描述
作用:返回一个指向这个字符串首字符的迭代器

end()

在这里插入图片描述
作用:返回一个指向这个字符串末尾后的字符的迭代器

begin() + end() 遍历字符串

	string s5 = "abcdefg";
	string::iterator it;
	for (it = s5.begin(); it != s5.end(); it++)
	{
		cout << *it << " ";
	}//输出 a b c d e f g
	cout << endl;

rbegin()

在这里插入图片描述
作用:返回字符串最后一个字符的位置

rend()

在这里插入图片描述
作用:返回字符串首字符的前一个位置

rbegin() + rend()反向遍历字符串

string s6 = "abcdefg";
	string::reverse_iterator rit;//反向迭代器
	for (rit = s6.rbegin(); rit != s6.rend(); rit++)
	{
		cout << *rit << " ";
	}//输出g f e d c b a
	cout << endl;

C++11范围for

	string s7 = "abcdefg";
	for (const auto& e : s7)
	{
		cout << e << " ";
	}

string类对象修改操作

在这里插入图片描述

operator+=

作用:在字符串后面追加字符

	string s1 = "abcdefg";
	s1 += "fff";
	cout << s1 << endl; //输出abcdefgfff
	string s2;
	s2 = s1 + "hhh";
	cout << s2 << endl;//输出abcdefgfffhhh
	string s3 = s1 + s2;
	cout << s3 <<end;//输出abcdefgfffabcdefgfffhhh

字符串操作

在这里插入图片描述

c_str()

在这里插入图片描述

作用:把const string类型转换成const char类型,并返回const char*的指针

	const char* ptr;
	string s7 = "abcdefg";
	ptr = s7.c_str();
	cout << ptr << endl;//输出abcdefg
	s7 = "aaaaaaaa";//改变原来的字符串
	cout << ptr << endl;//输出aaaaaaaa

由此可见返回的指针和字符串指针,这两个指针是指向的同一个地址

find

在这里插入图片描述
作用:从pos位置开始向末尾位置查找字符串或者字符,并返回对应的下标,如果没找到则返回npos.
参数s或c表示要查找的字符串或者字符
pos指在字符串中开始查找的起始位置
n表示要查找的字符串长度

	string s1 = "abcdeeeeefg";
	cout << s1.find('a');//输出0
	cout << s1.find("cde");//输出2
	cout << s1.find("cde", 3);
	//输出npos,从下标为3的位置开始找,没找到返回npos = 4294967295

rfind()

在这里插入图片描述
作用:从pos位置开始向0位置查找字符串或者字符,并返回对应的下标,如果没找到则返回npos

	string s2 = "abcdeeeeefg";
	cout << s2.rfind('e') << endl;//输出8----rfind()是倒着查找的
	cout << s2.rfind("cde") << endl;//输出2
	cout << s2.rfind('m') << endl;//输出npos = 4294967295

substr()

在这里插入图片描述
作用:在字符串中从pos位置开始截取长度为len的子串

	string s3 = "abcdefgh";
	string s4 = s3.substr(2, 5);
	cout << s4 << endl;//输出cdefg
	string s5 = s3.substr(2);
	cout << s5 << endl;//输出cdefgh

常量成员

npos

在这里插入图片描述
npos是静态成员常量,值为static const size_t npos = -1;
-1对应的无符号整数为4294967295

非成员函数重载

在这里插入图片描述

getline()

在这里插入图片描述
作用:获取一行字符串,包括空格

	string s6;
	getline(cin, s6);//输入a b  c gg----g后面也输入了两个空格
	cout << s6 << endl;//输出a b  c gg

在这里插入图片描述

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

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

相关文章

客户至上 服务至极 ——优维服务流程标准化体系

◎ 如何用服务打动客户&#xff1f; 在思考这个问题之前&#xff0c;首先我们要了解做好服务最难的是什么&#xff1f; 众所周知&#xff0c;由机器作业出来的东西是一致且规范的&#xff0c;而服务不一样。服务&#xff0c;是需要人来参与的&#xff0c;当由不同的人来完成某…

web问题定位:F12,如何找到对应接口

接口查看法&#xff0c;是我们最常用的定位前后端问题的方法。即&#xff1a;一般用来查看是后端返回给前端的数据有误&#xff0c;还是前端显示有误。 主流浏览器&#xff08;如Chrome&#xff0c;FireFox&#xff0c;等&#xff09;都有自带的接口查看工具&#xff0c;可以通…

微软wsl2 + ubantu + docker + 部署本地项目

windows 操作系统版本要达到要求 开启 wsl2 安装实用工具 Windows Terminal 和 Visual Studio Code 安装 Ubuntu 子系统 安装 Docker Desktop 并让 Docker Desktop 基于 wsl2 来运行 基础环境准备可以完全参照《搭建 Laravel Sail 开发环境 - Windows》来进行&#xff0c;我跟教…

2023年的深度学习入门指南(16) - JAX和TPU加速

2023年的深度学习入门指南(16) - JAX和TPU加速 上一节我们介绍了ChatGPT的核心算法之一的人类指示的强化学习的原理。我知道大家都没看懂&#xff0c;因为需要的知识储备有点多。不过没关系&#xff0c;大模型也不是一天能够训练出来的&#xff0c;也不可能一天就对齐。我们有…

葡萄酒质量预测

本文中所有代码及数据均存放于&#xff1a;https://github.com/MADMAX110/WineQualityPrediction 本文根据酸度、残糖和酒精浓度等特征训练和调整一个随机的葡萄酒质量森林模型。 一、设置环境&#xff0c;确认你的电脑安装了以下环境 Python 3NumPyPandasScikit-Learn (a.k.a…

Ubuntu 18.04 交叉编译Opencv-4.6.0

环境 操作系统&#xff1a;Ubuntu 18.04 OpenCv版本&#xff1a;4.6.0 交叉工具链&#xff1a;arm-linux-gnueabihf-gcc-5.3.1 下载OpenCV源代码 这里推荐大家到网上找OpenCV的Linux版本安装包&#xff08;.tar.gz结尾&#xff09;&#xff0c;不要github上clone&#xff08…

leetcode688. 骑士在棋盘上的概率(java)

骑士在棋盘上的概率 leetcode688. 骑士在棋盘上的概率题目描述 解题思路代码演示动态规划专题 leetcode688. 骑士在棋盘上的概率 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/knight-probability-in-chessboard 题目描…

【源码篇】基于ssm+vue+微信小程序的医疗科普小程序

系统介绍 这是一个ssmvue微信小程序的医疗科普小程序&#xff0c;分为pc端和微信小程序端 pc端包括&#xff1a;管理员角色和学生角色。 管理员拥有&#xff1a;学生管理、科普知识管理、论坛管理、收藏管理、试卷管理、留言板管理、试题管理、系统管理、考试管理 学生端拥…

AI实战营第二期 第五节 《目标检测与MMDetection》——笔记6

文章目录 摘要主要特性 常用概念框、边界框交并比 (loU)感受野有效感受野置信度 目标检测的基本思路难点滑框在特征图进行密集计算边界框回归基于锚框VS无锚框NMS&#xff08;非极大值抑制&#xff09;使周密集预测模型进行推理步骤如何训练密集预测模型的训练匹配的基本思路密…

C++ 教程(01)

C 教程 C 是一种高级语言&#xff0c;它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C 进一步扩充和完善了 C 语言&#xff0c;是一种面向对象的程序设计语言。C 可运行于多种平台上&#xff0c;如 Windows、MAC 操作系统以及 UNIX 的各种版本。 本教程通过…

节省90%编译时间,这是字节跳动开源的基于Rust的前端构建工具

Rspack 是一个基于 Rust 的高性能构建引擎&#xff0c;它可以与 Webpack 生态系统交互&#xff0c;并提供更好的构建性能。 在处理具有复杂构建配置的巨石应用时&#xff0c;Rspack 可以提供 5~10 倍的编译性能提升。 字节跳动将 Rspack 开源后&#xff0c;它在 GitHub 上已有 …

Bert+FGSM/PGD实现中文文本分类(Loss=0.5L1+0.5L2)

任务目标&#xff1a;在使用FGSM/PGD来训练Bert模型进行文本分类&#xff0c;其实现原理可以简单概括为以下几个步骤&#xff1a; 对原始文本每个词转换为对应的嵌入向量。将每个嵌入向量与一个小的扰动向量相加&#xff0c;从而生成对抗样本。这个扰动向量的大小可以通过一个超…

2023年牛客网最新版大厂Java八股文面试题总结(覆盖所有面试题考点)

程序员真的是需要将终生学习贯彻到底的职业&#xff0c;一旦停止学习&#xff0c;离被淘汰&#xff0c;也就不远了。 金九银十跳槽季&#xff0c;这是一个千年不变的话题&#xff0c;每到这个时候&#xff0c;很多人都会临阵磨枪&#xff0c;相信不快也光。于是&#xff0c;大…

多业务线下,IT企业如何应对市场经济下行危机?

多业务线下&#xff0c;IT企业如何应对市场经济下行危机&#xff1f; 市场经济下行就像是一辆行驶的车子遇到了坡道&#xff0c;速度开始变慢甚至停下来。在这个情况下&#xff0c;经济的增长变得较为缓慢&#xff0c;消费减少&#xff0c;投资减少&#xff0c;也对企业会带来…

运筹说 第25期 | 对偶理论经典例题讲解

对偶理论是研究线性规划中原始问题与对偶问题之间关系的理论&#xff0c;主要研究经济学中的相互确定关系&#xff0c;涉及到经济学的诸多方面。产出与成本的对偶、效用与支出的对偶&#xff0c;是经济学中典型的对偶关系。 对偶理论中最有力的武器是影子价格&#xff0c;影子…

【MySQL】主从复制部署

文章目录 概述SQL数据库的三大范式 主从复制技术产生原因主从形式原理图主节点 binary log dump 线程从节点I/O线程作用从节点SQL线程作用 复制过程复制模式异步模式&#xff08;mysql async-mode&#xff09;半同步模式(mysql semi-sync)全同步模式 复制机制binlog记录模式GTI…

android frida检测绕过

Frida检测是一种常见的安卓逆向技术&#xff0c;常用于防止应用程序被反向工程。如果您遇到了Frida检测&#xff0c;您可以尝试以下方法来绕过它&#xff1a; 使用Magisk Hide模块&#xff1a;Magisk是一个强大的安卓root工具&#xff0c;它附带了一个Magisk Hide模块&#xff…

二阳大规模来袭,热图地图分析新冠疫情期间的高发地点,掌握防控重点!

一、概述 最近&#xff0c;新冠疫情似乎又要“卷土重来”... 身边逐渐有人传来“二阳”或者“三羊”的消息&#xff0c;网上相关的讨论和报道也变得越来越多。 据「钟南山院士」在大湾区科学论坛上的发言&#xff0c;预测模型seirs显示&#xff0c;第二波新冠疫情已于4月中旬开…

当数据汇聚成海,Excel 表成为我们的航海图,如何在茫茫数据中找到目标?——Excel 表中某个范围内的单元格遍历思路

本篇博客会讲解力扣“2194. Excel 表中某个范围内的单元格”的解题思路&#xff0c;这是题目链接。 先来审题&#xff1a; 以下是输出示例和提示&#xff1a; 这道题的解题思路是&#xff1a;模拟&#xff0c;遍历每一列&#xff0c;某一列遍历完后遍历下一列。 下面我们需…

爆肝整理,性能测试-全链路压测与普通压测区别总结,进阶高级测试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 抛出一个问题&…