C++中string类的常用函数

文章目录

  • 默认成员函数
    • 常见构造函数(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

在这里插入图片描述

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

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

相关文章

广域网技术——ppp,pppoe

目录 PPP协议概述 PPP协议原理 PPP协议三大组件&#xff1a; PPP链路建立流程 PPP连接建立接口状态&#xff1a; LCP协议报文格式 PPP协议报文格式&#xff1a; 1&#xff0c;链路层建立连接过程 LCP协商过程-正常协商 LCP协商-参数不一致 LCP协商-参数不识别 2&#xf…

YOLOv5/v7 添加注意力机制,30多种模块分析③,GCN模块,DAN模块

目录 一、注意力机制介绍1、什么是注意力机制&#xff1f;2、注意力机制的分类3、注意力机制的核心 二、GCN 模块1、GCN 模块的原理2、实验结果3、应用示例 三、DAN模块1、DAN模块的原理2、实验结果3、应用示例 大家好&#xff0c;我是哪吒。 &#x1f3c6;本文收录于&#xf…

AMC12和高考数学哪个更难?知识点有哪些不同?

AMC12和高考数学哪个更难&#xff1f;知识点有哪些不同&#xff1f;今天小编给大家来详细介绍一下&#xff01; 难度对比 从难度上看&#xff0c;高考数学的计算量更大&#xff0c;并且知识点比AMC10/12超前&#xff0c;需要用到极限和微积分的知识。 反观AMC10/12不需要用到…

数据结构与算法之美 | 栈

栈结构&#xff1a;后进者先出&#xff0c;先进者后出 栈是一种“操作受限”的线性表 当某个数据集合只涉及在一端插入和删除数据&#xff0c;并且满足后进先出、先进后出的特性&#xff0c;这时我们就应该首选“栈”这种数据结构 栈的实现 使用数组实现&#xff1a;顺序栈…

初探图神经网络——GNN

title: 图神经网络(GNN) date: tags: 随笔知识点 categories:[学习笔记] 初探图神经网络(GNN) 文章来源&#xff1a;https://distill.pub/2021/gnn-intro/ 前言&#xff1a;说一下为什么要写这篇文章&#xff0c;因为自己最近一直听说“图神经网络”&#xff0c;但是一直不了…

pycharm使用之torch_sparse安装

正式安装之前要先查看一下torch的版本 一、查看torch版本 1、winR &#xff0c;输入cmd 2、输入python 3、 输入import torch&#xff0c;然后输入torch.__version__&#xff0c;最后回车 可以看到我的torch版本是1.10.0 二、下载合适的torch_sparse版本 1、打开链接 https…

接口反应慢优化

遇到某个功能&#xff0c;页面转圈好久&#xff0c;需要优化 1.F12 查看接口时间 2.看参数 总共耗时9.6s Waiting for sercer response 时间是2秒 Content Download 7秒 慢在Content Download F12查看接口响应 显示Failed to load response data:Request content was e…

spark入门 高可用部署HA(五)

一、standalone基于修改部署 https://blog.csdn.net/weixin_43205308/article/details/131070277?spm1001.2014.3001.5501 二、安装ZOOKEEPER zookeeper 安装下载与集群 三、修改conf下的spark-env.sh vim conf/spark-env.sh注释以下内容&#xff08;根据自己环境修改&am…

visual studio 2022,ADO.NET 实体数据模型添加 sqlite数据库对象

文章目录 前言前期环境博客github 文档解析文件安装说明文件下载省流版nuget环境配置成功标志sqlite连接测试 前言 我们知道ADO.NET 实体数据模型特别适合动态开发数据库。因为ADO.NET可以使用DB First 开发 我们在开发一个程序的时候&#xff0c;经常会动态更新数据库字段&a…

算法模板(3):搜索(4):高等图论

高等图论 有向图的强连通分量 相关概念 强连通分量&#xff1a;Strongly Connected Component (SCC).对于一个有向图顶点的子集 S S S&#xff0c;如果在 S S S 内任取两个顶点 u u u 和 v v v&#xff0c;都能找到一条 u u u 到 v v v 的路径&#xff0c;那么称 S S…

C++多态和文件读写

C黑马&#xff0c;每天1.5倍速2个视频&#xff08;1小时&#xff09;&#xff0c;看到9月1日完成314个视频 目录 &#x1f511;多态 &#x1f333;基本语法 &#x1f333;原理剖析 &#x1f333;案例1 -- 计算器类 &#x1f333;纯虚函数和抽象类 &#x1f333;案例2 --…

redis知识复习

redis知识复习 redis基础知识一. redis的认识1. 非关系型数据库 与 传统数据库 的区别2. 安装redis并设置自启动3. 熟悉命令行客户端4. 熟悉图形化工具RDM 二. redis的命令与数据结构1. 数据结构介绍2. redis通用命令&#xff08;熟练掌握&#xff09; 三. redis的Java客户端1.…

SpringBoot整合Flyway实现数据库的初始化和版本管理

文章目录 一、Flyway1、介绍2、业务痛点3、个人理解 二、SpringBoot整合flyway1、整合2、SQL文件命名3、版本号校验算法4、工作流程5、注意事项 一、Flyway 1、介绍 Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用&#xff0c;或者在Java应用程序中引入…

【MySQL】数据表的基本操作

目录 1. 创建表 2. 创建表案例 2.1 创建一个users表 2.2 查看表结构 2.3 修改表 3. 删除表 MySQL&#x1f337; 1. 创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储…

chatgpt赋能python:如何升级Python的pip版本

如何升级Python的pip版本 如果你使用Python来进行程序开发&#xff0c;那么你一定需要用到pip&#xff0c;它是Python的包管理器&#xff0c;用于安装和管理各种Python库。 不过&#xff0c;一旦你开始使用pip&#xff0c;你可能会遇到一个问题&#xff1a;你的pip版本可能会…

几种技巧让大模型(ChatGPT、文心一言)帮你提高写代码效率!

代码神器 自从大模型推出来之后&#xff0c;似乎没有什么工作是大模型不能做的。特别是在文本生成、文案写作、代码提示、代码生成、代码改错等方面都表现出不错的能力。下面我将介绍运用大模型写代码的几种方式&#xff0c;帮助程序员写出更好的代码&#xff01;&#xff08;…

利用AI点亮副业变现:5个变现实操案例的启示

AI变现副业实操案例 宝宝起名服务AI科技热点号头像壁纸职业头像收徒&#xff1a;萌娃头像定制头像平台挂载 小说推广号流量营销号百家号AI共创计划公众号流量主 知识付费知识星球小报童&#xff1a; 整体思维导图&#xff1a; 在这里先分享五个实操案例: 宝宝起名服务AI科技热…

cvte 前端一面 凉经

cvte 前端一面 凉经 原文面试题地址&#xff1a;https://www.nowcoder.com/discuss/353159272857018368?sourceSSRsearch 1. vuex原理 和vuerouter的原理差不多 2. vuerouter的原理 ​ 首先在main.js中&#xff0c;import router from ‘./router’ 引入在router文件夹下面…

学习WooCommerce跨境电商社交媒体营销

WooCommerce 长期以来一直为电子商务店主提供多样化的服务。大约 500 万家商店啓用安装了免费的 WooCommerce 插件。 官方 WooCommerce 插件从 WordPress.org 下载了161,908,802次&#xff0c;并且还在增加。 超过5,106,506 个网站正在使用 WooCommerce。 本文网址: https…

一文搞懂什么是Docker

一、什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环境不一定一致&#xff0c;会遇…