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; //11cout << 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.rhkb.cn/news/423126.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cloudflare Pages 部署 Next.js 应用教程

Cloudflare Pages 部署 Next.js 应用教程 本教程将指导你如何将现有的 Next.js 应用部署到 Cloudflare Pages。 准备工作 安装部署依赖 首先,安装 cloudflare/next-on-pages: npm install --save-dev cloudflare/next-on-pages添加 wrangler.toml 配置文件 在项目根目录创建 …

力扣139-单词拆分(Java详细题解)

题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完背包&#xff0c;所以现在的题解都是以背包问题为基础再来写的。 如果大家不懂背包问题的话&#…

【LoRA】浅谈大模型微调之LoRA技术

在当今的信息时代中&#xff0c;大型语言模型扮演着至关重要的角色&#xff0c;它们在自然语言处理任务中展现出强大的能力。LoRA&#xff0c;英文全称Low-Rank Adaptation of Large Language Models&#xff0c;是一种用于微调大型语言模型的低秩适应技术&#xff0c;由微软的…

Java Enterprise System 体系结构

本章概述了 Java Enterprise System 部署所基于的体系结构概念。 章中描述了一个框架,在此框架内从三维角度对 Java Enterprise System部署体系结构进行了分析,它们分别是:逻辑层、基础结构服务级别和服务质量。这三维在下图中以图解形式显示为正交坐标轴,它们有助于在体系…

jmeter之TPS计算公式

需求&#xff1a; 如何确定环境当中的TPS指标 PV:&#xff08;Page View&#xff09;即页面访问量&#xff0c;每打开一次页面PV计数1&#xff0c;刷新页面也是。PV只统计页面访问次 数。 UV(Unique Visitor),唯一访问用户数&#xff0c;用来衡量真实访问网站的用户数量。 一般…

大模型的第一个杀手级应用场景出来了

大家终于都意识到大模型首先改变的是软件行业自己&#xff0c;而软件的根基是代码生成。代码生成第一波就是AI辅助开发&#xff0c;这个会是大模型第一个杀手级应用。大家苦苦逼问自己的大模型杀手级应用&#xff0c;为什么会是辅助编程&#xff0c;这里说下什么&#xff1a; 必…

vscode 使用git bash,路径分隔符缺少问题

window使用bash --login -i 使用bash时候&#xff0c;在系统自带的terminal里面进入&#xff0c;测试conda可以正常输出&#xff0c;但是在vscode里面输入conda发现有问题 bash: C:\Users\marswennaconda3\Scripts: No such file or directory实际路径应该要为 C:\Users\mars…

PyTorch安装指南:轻松上手深度学习框架(CUDA)

PyTorch 是一个非常流行的开源深度学习框架&#xff0c;它支持动态图&#xff0c;这使得开发者能够更容易地构建和调试复杂的模型。PyTorch 可以运行在 CPU 上&#xff0c;也可以利用 NVIDIA 的 CUDA 平台加速计算&#xff0c;从而在 GPU 上执行。下面是如何在你的系统上安装 P…

质量体系和质量过程管理及SCIOT平台质量管理功能简介

原创 团长团 AI智造AI编程 2024年09月13日 21:04 北京 用爱编程30年&#xff0c;倾心打造工业和智能智造软件研发平台SCIOT,用创新的方案、大幅的让利和极致的营销&#xff0c;致力于为10000家的中小企业实现数字化转型&#xff0c;打造数字化企业和智能工厂&#xff0c;点击上…

预报名来啦!25届考研所有重要时间节点和注意事项一览

预报名即将开始&#xff0c;学姐给大家准备了&#xff0c;详细的报考流程及常见问题&#xff0c;每年都有学生因为报名出问题导致没法参加考试&#xff0c;大家一定要认真对待哦~ 一.报名时间及流程 01 预报名时间 2024年9月24日至9月27日&#xff0c;9:00—22:00 02 预报名…

Vue的学习(三)

目录 一、for循环中key的作用 1‌.提高性能‌&#xff1a; ‌2.优化用户体验‌&#xff1a; ‌3.辅助Vue进行列表渲染‌&#xff1a; 4‌.方便可复用组件的使用‌&#xff1a; 二、methods及computed及wacth的区别 三、过滤器 1.Vue 2 过滤器简介 定义过滤器 使用过滤…

map与set

目录 关联式容器 键值对 树形结构的关联式容器 set 注意 set的使用 set的模板参数列表 set的构造 set的迭代器 set修改操作 set的使用举例 map map的使用 map的迭代器 map的容量与元素访问 注意 map中元素的修改 总结 multiset 注意 multiset的使用 multi…

基于中心点的目标检测方法CenterNet—CVPR2019

Anchor Free目标检测算法—CenterNet Objects as Points论文解析 Anchor Free和Anchor Base方法的区别在于是否在检测的过程中生成大量的先验框。CenterNet直接预测物体的中心点的位置坐标。 CenterNet本质上类似于一种关键点的识别。识别的是物体的中心点位置。 有了中心点之…

【重学 MySQL】二十二、limit 实现分页

【重学 MySQL】二十二、limit 实现分页 基本语法实现分页第一页第二页通用公式注意事项在 MySQL 中,LIMIT 子句非常强大,它允许你限制查询结果的数量,同时也经常被用来实现分页功能。分页是 Web 开发中常见的需求,它允许用户浏览大量数据时,一次只查看一小部分数据。 基本…

unity3d入门教程四

unity3d入门教程四 10.1坐标与旋转10.2物体的运动10.3&#xff08;练习&#xff09;掉头飞行11.1向量11.2向量间运算11.3向量夹角11.4物体的指向11.5&#xff08;练习&#xff09;飞向目标12.1屏幕坐标12.2屏幕的边界 10.1坐标与旋转 比如&#xff0c;节点的坐标用 Vector3 类型…

数据结构-线性表顺序单项链表双向链表循环链表

1数据结构概述 数据结构是计算机组织、存储数据的方式。是思想层面的东西&#xff0c;和具体的计算机编程语言没有关系。可以用任何计算机编程语言去实现这些思想。 1.1 数据逻辑结构 反映数据逻辑之间的逻辑关系&#xff0c;这些逻辑关系和他们咱在计算机中的存储位置无关。…

apache文件共享和访问控制

实现apache文件共享 文件共享路径 <Directory "/var/www/html"> #默认发布路径&#xff0c;功能限制 Options Indexes FollowSymLinks #indexes支持文件共享功能 AllowOverride None Require all granted </Directory> 进入到该路径下 cd…

为什么sqlynx是连接国产数据库的最佳选择?

1. 广泛的国产数据库支持 SQLynx除了国际上的主流数据库外&#xff0c;还支持多种国产数据库&#xff0c;如达梦、人大金仓、OceanBase、openGauss等。随着国产数据库市场的不断发展和成熟&#xff0c;越来越多的企业和机构开始选择国产数据库来满足其数据管理需求。SQLynx通过…

WebGL系列教程三(使用缓冲区绘制三角形)

目录 1 前言2 缓冲区介绍3 声明顶点的位置和颜色4 回忆Shader的初始化5 开始缓冲区的逻辑5.1 声明顶点坐标5.2 创建并绑定缓冲区5.3 获取顶点着色器中的变量5.4 使变量从缓冲区取值5.5 绘制5.6 完整代码 6 总结 1 前言 上一篇中我们介绍了WebGL的环境搭建及Shader的初始化&…

webpack - 五大核心概念和基本配置(打包一个简单HTML页面)

// 五大核心概念 1. entry&#xff08;入口&#xff09; 指示Webpack从哪个文件开始打包2. output&#xff08;输出&#xff09; 指示Webpack打包完的文件输出到哪里去&#xff0c;如何命名等3. loader&#xff08;加载器&#xff09; webpack本身只能处理js&#xff0c;json等…