string函数以及string常用接口
本文介绍的是C++关键字string中一些重要用法,以及各种字符串序列的处理操作
——飘飘何所似,天地一沙鸥
文章目录
- 前言
- 一、string(字符串类)
- 二、string类对象的容量操作
- 2.1 size/length
- 2.2 capacity
- 2.3 empty/clear
- 2.4 resize/reserve
- 三、string类对象的访问及便利操作
- 3.1 operator[]
- 3.2 begin+end(迭代器)
- 3.3 范围for
- 四、string类对象的修改操作
- 4.1 operator+=/push_back/append
- 4.2 c_str
- 4.3 find/rfind
- 4.4 substr
前言
string是C++、java、VB等编程语言中的字符串,字符串是一个特殊的对象,属于引用类型。 在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类对象。 C++标准库中string类以类型的形式对字符串进行封装,且包含了字符序列的处理操作。
一、string(字符串类)
- 字符串是表示字符序列的类。
- 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
- string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。
- string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits
和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。 - 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。
总结:
- string是表示字符串的字符串类。
- 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
- string在底层实际是:basic_string模板类的别名typedefbasic_string<char,char_traits,allocator> string;
- 不能操作多字节或者变长字符的序列。在使用string类时,必须包含#include头文件以及using namespace std;
二、string类对象的容量操作
2.1 size/length
size_t size() const;
计算字符串长度类接口
#include<iostream>using namespace std;int main()
{//创建string类型的字符串strstring str = ("hello C++");//计算str大小std::cout << "The size of str is " << str.size() << " bytes.\n";return 0;
}
length与size并没有什么区别,仅仅只是在STL没有出现时,length就已经存在了,而我们也知道语言的发展一定是向下兼容的它不会去删除原有的东西,只会出现更多的补丁和更加新鲜的东西
#include<iostream>using namespace std;int main()
{string str = ("hello C++");std::cout << "The size of str is " << str.size() << " bytes.\n";std::cout << "The size of str is " << str.length() << " bytes.\n";return 0;
}
2.2 capacity
size_t capacity() const;
计算string类空间大小
#include<iostream>using namespace std;int main()
{string str = ("hello C++");std::cout << "The size of str is " << str.size() << " bytes.\n";std::cout << str.capacity() << endl;return 0;
}
2.3 empty/clear
bool empty() const;
检出字符串释放为空串,是则返回ture,否返回false
void clear();
清空字符串但是不会删除该字符串空间
仅仅只是一个判断string类字符串是否已经置为空。
S1中内容已经被删空但是我们看到S1所在空间并没有被释放还是在原来的地址,并且可以访问到,存入新的东西。
2.4 resize/reserve
void resize (size_t n);
void resize (size_t n, char c);
将有效字符改为n,并将多余的空间用c填充
void reserve (size_t n = 0);
为字符串预留空间
先将s的内容改为和s1一致然后对他们分别使用resize/reserve进行扩容,最后分别输出他们的内容和他们所扩容空间的大小。
resize/reserve根本的区别就在于一个对它所开的空间进行初始化而另一个并不会对开的空间进行初始化,还有一点就是当所开空间小于原有空间时他会保留前面n个数据,然年舍弃多余的部分
另外,在进行空间开辟工作时候,最后事先知道空间用量进行提前预留使用reserve会极大的提高时间复杂度
三、string类对象的访问及便利操作
3.1 operator[]
char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
返回pos位置的字符,const string类对象调用
不做过多介绍类似于数组的方式来直接获取第pos个数据
3.2 begin+end(迭代器)
iterator begin();
const_iterator begin() const;
迭代器是string中便利字符串的一种重要工具,具体实现如下
3.3 范围for
范围for的底层实现就是调用迭代器,在使用的时候借用了关键字auto可以不用定义冗余的类型算是一种很方便的用法不过多介绍,代码如下
for(auto ch:s)
{
cout<<ch<<" ";
ch++;
}
cout<<endl;
四、string类对象的修改操作
4.1 operator+=/push_back/append
string& operator+= (const string& str);
string& operator+= (const char s);
string& operator+= (char c)*
最便捷的一种追加方式+=直接在原字符串上进行,可以追加string类/字符串/字符,直接+=
void push_back (char c);
尾插字符c,就是顺序表/链表的那种尾插方式,遍历尾插,不建议用效率很低
operator+=可以随意的进行字符/字符串/类的追加
append!是坑不作介绍不建议用
4.2 c_str
const char c_str() const;*
c_str()是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址。 换种说法,c_str ()函数返回一个指向正规C字符串的 指针常量 ,内容与本string串相同。
c_str()返回的是一个临时指针随着原指针指向位置数值的改变
这样看来c_str好像没有实际的意义与用途,其实s_str多用于与其他各种操作一起进行我们只需要了解他的用法就可以,一般不会单独使用来实现什么东西。在进行c_str的使用时尽量在每次都strcpy一下防止丢失。
int main() {char ptr[5];string s = "12345";strcpy(ptr, s.c_str());cout << "s改变前ptr为:" << ptr << endl;s = "66666";cout << "s改变后ptr为:" << ptr << endl;return 0;//结果 ptr=”12345“
}
4.3 find/rfind
size_t find (const string& str, size_t pos = 0) const;
size_t find (const char s, size_t pos = 0) const;
size_t find (const char s, size_t pos, size_t n) const;
size_t find (char c, size_t pos = 0) const;**
从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
此处我使用的是省略第二个参数,那么它所默认的位置就是从0位置开始查找也就是从S3字符串的h开始查找。
rfind则是反向查找
4.4 substr
string substr (size_t pos = 0, size_t len = npos) const;
在str中从pos位置开始,截取n个字符,然后将其返回
这是一个很好玩的接口,从第n个字符开始截取字符串中m个字符返回赋予,当我们知道某个分字符串在总字符串中的位置的时候,就可以定向的将所知的分字符串赋予任意一变量
在string类中它充当的是字符串截取的功能
相关文章:
string函数以及string常用接口
本文介绍的是C关键字string中一些重要用法,以及各种字符串序列的处理操作 ——飘飘何所似,天地一沙鸥 文章目录前言一、string(字符串类)二、string类对象的容量操作2.1 size/length2.2 capacity2.3 empty/clear2.4 resize/reser…...
分享一篇由C语言实现《数据结构》无头无循环单链表
三月,你好,各位csdn uu们好 文章目录前言一、何为单链表二、单链表基本操作(增,删,查,改,销毁,遍历)1.查找与修改、销毁与遍历2.链表插入与删除操作三、单链表 VS 顺序表…...
C盘爆满?两个超简单的解决办法
我们在使用电脑的过程中,经常容易出现C盘爆红,反而其他盘还有大量可用空间的情况。为什么会这样呢?其实主要就两种原因:一是电脑使用习惯不好,不管什么软件都默认安装在C盘,大文件又喜欢放在桌面࿰…...
ThreadLocal
ThreadLocalThreadLocalMapgetsetremove内存泄漏key用强/弱引用entry继承了弱引用ThreadLocal 一个对象的所有线程会共享其全局变量——>线程不安全 解决方式: 方式一:同步机制,加锁(时间换空间) 方式二:…...
Java基础:JDK7-时间Date
JDK7以前时间相关类 1.Date Date date new Date(); , sout(date)得到的是现在所处位置的时间 Date date new Date(0L); , sout(date)得到的是时间原点也就是1970年1月1日08:00(东八区). date.setTime(1000L); sout(date)得到的是时间原点后一秒钟的时间 long time date.g…...
什么是IP地址?
IP协议中还有一个非常重要的内容,那就是给因特网上的每台计算机和其它设备都规定了一种地址,叫做“IP 地址”。由于有这种地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。…...
4年经验之谈,什么是接口测试?怎样做接口测试?
一、什么是接口?【文末学习资源分享】赶紧嫖!冲!!!! 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过…...
普通指针扫盲
一、什么是指针 C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。 CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存 中的一个指定数据…...
深度学习笔记:神经网络权重确定初始值方法
神经网络权重不可为相同的值,比如都为0,因为如果这样网络正向传播输出和反向传播结果对于各权重都完全一样,导致设置多个权重和设一个权重毫无区别。我们需要使用随机数作为网络权重 实验程序 在以下实验中,我们使用5层神经网络…...
关于 python 的异常使用说明 (python 的文件和异常)
文章目录异常1. 处理异常 ZeroDivisionError 异常2. 使用 try-except 代码块3. 使用异常避免崩溃4. else 代码块5. 处理 FileNotFoundError 异常6. 分析文本7. 失败时一声不吭异常 pyhong 使用被异常成为异常的特殊对象来管理程序执行期间发生的错误。 每当发生让 python 不知所…...
Spark RDD持久化
RDD Cache缓存 RDD通过Cache或者Persist方法将前面的计算结果缓存,默认情况下会把数据以序列化的形式缓存在JVM的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供…...
【Linux】Linux系统安装Python3和pip3
1.说明 一般来说Linux会自带Python环境,可能是Python3或者Python2,可能有pip也可能没有pip,所以有时候需要自己安装指定的Python版本。Linux系统下的安装方式都大同小异,基本上都是下载安装包然后编译一下,再创建好软…...
用java进行base64加密
首先定义一组密钥,加密和解密使用同一组密钥private final String key "hahahahahaha";也可以随机生成密钥/*** 生成随机密钥* param keySize 密钥大小推荐128 256* return* throws NoSuchAlgorithmException*/public static String generateSecret(int keySize) th…...
torch函数合集
torch.tensor() 原型:torch.tensor(data, dtypeNone, deviceNone, requires_gradFalse) 功能:其中data可以是:list,tuple,NumPy,ndarray等其他类型,torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应类型的torch.Tenso…...
AcWing算法提高课-3.1.2信使
宣传一下算法提高课整理 <— CSDN个人主页:更好的阅读体验 <— 题目传送门点这里 题目描述 战争时期,前线有 nnn 个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。 信使负责在哨所之间传递信息,当然,…...
Paddle OCR Win 11下的安装和简单使用教程
Paddle OCR Win 11下的安装和简单使用教程 对于中文的识别,可以考虑直接使用Paddle OCR,识别准确率和部署都相对比较方便。 环境搭建 目前PaddlePaddle 发布到v2.4,先下载paddlepaddle,再下载paddleocr。根据自己设备操作系统进…...
杂谈:数组index问题和对象key问题
面试题一: var arr [1, 2, 3, 4] 问:arr[1] ?; arr[1] ?答:arr[1] 2; arr[1] 2 这里可以再分为两个问题: 1、数组赋值 var arr [1, 2, 3, 4]arr[1] 10; // 数字场景 arr[10] 1; // 字符串场景 arr[a] 1; // 字符串…...
三天Golang快速入门—Slice切片
三天Golang快速入门—Slice切片Slice切片切片原理切片遍历append函数操作切片append添加append追加多个切片中删除元素切片合并string和slice的联系Slice切片 切片原理 由三个部分构成,指针、长度、容量指针:指向slice第一个元素对应的数组元素的地址长…...
腾讯会议演示者视图/演讲者视图
前言 使用腾讯会议共享PPT时,腾讯会议支持共享用户使用演示者视图/演讲者视图,而会议其他成员可以看到正常的放映视图。下面以Win10系统和Office为例,介绍使用步骤。值得一提的是,该方法同时适用于单显示屏和多显示屏。 腾讯会议…...
【C++】类与对象(一)
文章目录1、面向过程和面向对象初步认识2、类的引入3、类的定义4、类的访问限定符5、类的作用域6、类的实例化7、计算类对象的大小8、this指针9、 C语言和C实现Stack的对比1、面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题…...
JavaScript基本语法
本文提到的绝大多数语法都是与Java不同的语法,相同的就不会赘述了.JavaScript的三种引入方式内部js<body><script>alert(hello);</script> </body>行内js<body><div onclick"alert(hello)">这是一个div 点击一下试试</div>…...
OpenCV4.x图像处理实例-道路车辆检测(基于背景消减法)
通过背景消减进行道路车辆检测 文章目录 通过背景消减进行道路车辆检测1、车辆检测思路介绍2、BackgroundSubtractorMOG23、车辆检测实现在本文中,将介绍如何使用简单但有效的背景-前景减法方法执行车辆检测等任务。本文将使用 OpenCV 中使用背景-前景减法和轮廓检测,以及如何…...
pwnlab通关流程
pwnlab通关 关于文件包含,环境变量劫持的一个靶场 信息收集 靶机ip:192.168.112.133 开放端口 根据开放的端口信息决定从80web端口入手 目录信息 在images和upload路径存在目录遍历,config.php被渲染无法查看,upload.php需…...
面向过程与面向对象的区别与联系
目录 什么是面向过程 什么是面向对象 区别 各自的优缺点 什么是面向过程 面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。 什么是面向对…...
主机状态(查看资源占用情况、查看网络占用情况)
1. 查看资源占用情况 【1】可以通过top命令查看cpu、内存的使用情况,类似windows的任务管理器 默认5s刷新一次 语法:top 可 Ctrl c 退出 2.磁盘信息监控 【1】使用df命令,查看磁盘信息占用情况 语法:df [ -h ] 以更加人性化…...
代码随想录算法训练营第四十一天 | 01背包问题-二维数组滚动数组,416. 分割等和子集
一、参考资料01背包问题 二维 https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 视频讲解:https://www.bilibili.com/video/BV1cg411g7Y6 01背包问题 一维 https://programmercarl.com/%E8%83%8C%E5…...
VMware NSX 4.1 发布 - 网络安全虚拟化平台
请访问原文链接:VMware NSX 4 - 网络安全虚拟化平台,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org VMware NSX 提供了一个敏捷式软件定义基础架构,用来构建云原生应用程序环境。NSX 专注于为具有异…...
计算理论 复杂度预备知识
文章目录计算理论 复杂度预备知识符号递归表达式求解通项公式主方法Akra-Bazzi 定理计算理论 复杂度预备知识 符号 f(n)o(g(n))f(n)o(g(n))f(n)o(g(n)) :∃c\exists c∃c ,当 nnn 足够大时, f(n)<cg(n)f(n)\lt cg(n)f(n)<cg(n) &#…...
二叉树——二叉搜索树中的插入操作
二叉搜索树中的插入操作 链接 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意,…...
C# if break,if continue,if return的区别和使用
故事部分: 现在你肚子饿了,想要去: 1.吃个三菜一汤。 2.吃个蛋糕。 3.喝个奶茶。 结果,你吃饭的时候,吃到一个虫子。 你会有几种做法? 1.把有虫子这道菜拿走,继续吃下一道菜 。 2.算了ÿ…...
软件开发外包交易平台/淘宝怎么优化关键词排名
前言 Android开发前几年火爆一时,市场饱和后Android程序员每一名程序员都想成为架构师,但这期间,需要付出的辛苦和努力远超过我们的想象。 我对Android工程师的调研发现:97% 的Android开发 技术人都会面临这些困境(可…...
小说网站开发业务逻辑/seo黑帽有哪些技术
计算属性 1.作用 1.当需要处理一些复杂的业务逻辑时,需要用到计算属性. 2.一行表达式无法完成的计算时,需要使用计算属性2.使用 * 1.计算属性中定义的属性名可以直接显示在视图中 * 2.计算属性值必须要有return 3.计算属性中属性名不能和data中的属性名重叠 书写规范: comput…...
建立企业网站费用/域名服务器查询
leetcode1477. 找两个和为目标值且不重叠的子数组 给你一个整数数组 arr 和一个整数值 target 。 请你在 arr 中找 两个互不重叠的子数组 且它们的和都等于 target 。可能会有多种方案,请你返回满足要求的两个子数组长度和的 最小值 。 请返回满足要求的最小长度…...
上海专业网站建设哪家好/seo计费系统
Python2的字符串有两种:str 和 unicode;Python3的字符串也有两种:str 和 bytes。bytes可以是任何二进制数据,文本/图片/视频/音频等等。str就是文本。str与bytes互转b b"example" # bytes objects "example"…...
网站中英文版怎么做/泰安seo
一、平稳退化 1、概念 早期,在未使用JavaScript之前,网页中的内容可以正常显示出来,用户可以通过外设(如鼠标)操控浏览到相关内容,这种浏览体验对用户而言可能并不理想。 根据这个需求,内容的提…...
航空网站建设/google官网下载
从dict开始说起 学python的时候,我们一定会接触到dict(字典)这个数据结构。 dict结构展示了数据间(key与value)一一对应的关系,key作为一个查询索引,是不允许有重复的,而不同key所…...