C++string 类的常用方法

news2024/11/28 22:56:35

string (构造函数)

(1) default

构造长度为零字符的空字符串。

(2) copy

构造 str 的副本。

(3) substring

复制从字符位置 pos 开始并跨越 len 字符的 str 部分(如果任一 str 太短或 len 为 string::npos,则复制 str 的末尾)。

(4) from c-string

复制以 null(\0) 结尾的字符序列(C 字符串)。

(5)from sequence

从 s 指向的字符数组中复制前 n 个字符。

(6) fill 

用字符 c 的 n 个连续副本填充字符串。

operator= (为字符串分配一个新值,替换其当前内容)

字符串赋值

为字符串分配一个新值,替换其当前内容。

size 和 lengh (返回字符串的长度)

 这两个成员函数功能是一样的:

字符串的返回长度

返回字符串的长度(以字节为单位)。
这是符合字符串内容的实际字节数,不一定等于其存储容量。

 operator[](返回对字符串中位置 pos 处的字符的引用)

 返回字符串中位置 pos 处的字符的引用。

 operator[] 会越界检查( assert(pos<s.size()) )

const char& operator[] (size_t pos) const;

迭代器 (返回指向字符串字符位置的迭代器的迭代器)

返回开始位置的迭代器。 

返回最后一个字符下一个位置的迭代器。 

我们暂且可以将迭代器理解为一个像指针一样的东西。

 iterator 是定义在类域里面的

 我们可以通过迭代器来修改指向的内容

 返回最后一个字符位置的迭代器。 

返回开始位置的前一个位置的迭代器。  

注意:rend 和 begin 是不能混合用的

这里++底层是--,<底层是>。

sort(按升序对区域中的元素进行排序)(字典序)

需要头文件<algorithm> 

push_back (将字符 c 追加到字符串的末尾)

将字符附加到字符串

将字符 c 追加到字符串的末尾,将其长度增加 1。

 append(通过在当前值的末尾附加其他字符来扩展字符串)

(1) string

附加 str 的副本。

(2)substring

追加 str 子字符串的副本。子字符串是 str 中从字符位置 subpos 开始并跨越 sublen 字符的部分(或者直到 str 的末尾,如果任一 str 太短或 sublen 是 string::npos)。

(3)c-string

追加由 s 指向的以 \0 结尾的字符序列(C 字符串)构成的字符串的副本。

(4)buffer

追加 s 指向的字符数组中前 n 个字符。

(5) fill

连续n 个字符 c 。

(6) range

按相同的顺序追加 [first,last] 范围内字符序列的副本。

operator+= (通过在当前值的末尾附加其他字符来扩展字符串)

追加到字符串

通过在当前值的末尾附加其他字符来扩展字符串:

对比上面两个还是+=更加好用:

 pop_back(尾删)

尾删:

 erase(擦除部分字符串,减少其长度)

(1)sequence

擦除字符串值中从字符位置 pos 开始并跨越 len 字符的部分(如果len>st.size()或 len 为 string::npos,则擦除字符串值的末尾。)

请注意,默认参数会擦除字符串中的所有字符(如成员函数 clear)。

(2) character

擦除 p 指向的字符。

(3) range

擦除 [first,last] 范围内的字符序列。

 insert(在字符串中插入其他字符,紧挨着 pos(或 p)指示的字符)

(1) string

插入 str 的副本。

(2) substring

插入 str 的子字符串的副本。子字符串是 str 中从字符位置 subpos 开始并跨越 sublen 字符的部分(或者直到 str 的末尾,如果任一 str 太短或 sublen 是 npos)。

(3) c-string

插入由 s 指向的以 null 结尾的字符序列(C 字符串)形成的字符串的副本。

(4) buffer

在以 s 为指的字符数组中插入前 n 个字符的副本。

(5) fill

插入字符 c 的 n 个连续副本。

(6) single character

插入字符 c

(7) range

 以相同的顺序在 [first,last] 范围内插入字符序列的副本。

 erase 与 insert 类似,效率低慎用。

replace(替换字符串的一部分)

替换字符串的一部分

用新内容替换字符串中从字符 pos 开始并跨越 len 字符的部分(或字符串在 [i1,i2) 之间的部分):

效率不高,慎用。 

reserve (将字符串容量调整为计划的大小)

请求更改容量

请求将字符串容量调整为计划的大小更改,长度最多为 n 个字符。

vs 默认是不能缩容的

g++ 会缩

resize(将字符串大小调整为 n 个字符的长度)

调整字符串大小

将字符串大小调整为 n 个字符的长度。
如果 n 小于当前字符串长度,则当前值将缩短为n 个字符,从而删除第 n个字符之外的字符。

resize()只能扩容不能缩容。 

at(返回对字符串中位置 pos 处的字符)

获取字符串中的字符

返回对字符串中位置 pos 处的字符的引用。

下面是at 和 operator[] 的区别

 

 find rfind (查找字符串中内容的出现项)

在字符串中查找内容 

在字符串中搜索其参数指定的序列的第一次出现

第一个匹配的第一个字符的位置。
如果未找到匹配项,该函数将返回 string::npos。

 

 查找字符串中内容的最后出现项

在字符串中搜索其参数指定的序列的最后一次出现项。
与find 一样没找到的话返回 npos。

因此我们可以利用这个机制来找文件后缀。 

substr(生成子字符串)

子字符串是对象中从pos位置开始并跨越len个字符的部分 。

pos:

  1. 要作为子字符串复制的第一个字符的位置。
  2. 如果这等于字符串长度,则该函数返回一个空字符串。
  3. 如果这大于字符串长度,则抛出out_of_range。
  4. 注意:第一个字符用值 0(不是 1)表示。

len

        子字符串中要包含的字符数(如果字符串较短,则使用尽可能多的字符)。
         指示字符串末尾之前的所有字符。

从后面开始往前找。 

找到与(“/\\")这两个字符匹配的任意一个字符返回下标

注意\\ 是转义字符实际上代表 \  

这个则是从头开始找

 operator+(返回一个新构造的字符串对象)

返回一个新构造的字符串对象,其值是 lhs 中字符的串联,后跟 rhs 的字符。

 relational operators (string)(关系运算符)

字符串的关系运算符

在字符串对象 lhs 和 rhs 之间执行适当的比较操作

按照字典序比较

 swap(交换两个字符串的值)

 

将字符串插入到流中和从流中提取字符串 

 

 但是cin 有一点不好的是

cin 流提取有一个特点就是遇到空格或者换行他就结束

默认规定空格或者换行是多个值之间的分割

 怎样提取完整呢?如下

getline(将行从流获取到字符串)

从 is 中提取字符并将它们存储到 str 中,直到找到分隔符 delim(或换行符 '\n',用于 (2))。

如果在 is 中到达文件末尾,或者在输入操作期间发生其他错误,则提取也会停止。

如果找到分隔符,则将其提取并丢弃(即不存储分隔符,并在其之后开始下一个输入操作)。

请注意,调用之前的任何内容都将替换为新提取的序列。

感谢大家的观看! 

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

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

相关文章

Ardupilot开源代码之Rover上路 - 后续1

Ardupilot开源代码之Rover上路 - 后续1 1. 源由2. 问题汇总2.1 问题1&#xff1a;飞控选择2.2 问题2&#xff1a;飞控安装位置和固定2.3 问题3&#xff1a;各种插头、插座配套2.4 问题4&#xff1a;分电板缺陷2.5 问题5&#xff1a;电机编码器接线及正反向问题2.6 问题6&#x…

docker-compose集成elk(基于logstash+filebeat)采集java和nginx日志

1.准备compose.yml编排式文件 services: #日志信息同步logstash:container_name: logstashimage: docker.elastic.co/logstash/logstash:7.17.14 #logstash:command: logstash -f /usr/share/logstash/pipeline/logstash.confdepends_on:- elasticsearchrestart: on-failurepo…

车机HMI:驾驶员小命握在UI设计师手,九大法则必须遵循。

本文给大家列举了九大法则&#xff0c;欢迎评论点赞交流。 在车机HMI设计中&#xff0c;为了降低驾驶员的反应时间并增加驾驶安全性&#xff0c;可以遵循以下UI设计法则&#xff1a; 易读性和可识别性 确保界面上的文本和图标清晰易读&#xff0c;避免使用过小、过于复杂或模…

Crossplane 实战:构建统一的云原生控制平面

1 什么是 Crossplane Crossplane 是一个开源的 Kubernetes 扩展&#xff0c;其核心目标是将 Kubernetes 转化为一个通用的控制平面&#xff0c;使其能够管理和编排分布于 Kubernetes 集群内外的各种资源。通过扩展 Kubernetes 的功能&#xff0c;Crossplane 对 Kubernetes 集群…

GoF之代理模式(静态代理+动态代理(JDK动态代理+CGLIB动态代理带有一步一步详细步骤))

1. GoF之代理模式&#xff08;静态代理动态代理(JDK动态代理CGLIB动态代理带有一步一步详细步骤)&#xff09; 文章目录 1. GoF之代理模式&#xff08;静态代理动态代理(JDK动态代理CGLIB动态代理带有一步一步详细步骤)&#xff09;每博一文案2. 代理模式的理解3. 静态代理4. 动…

[AIGC] 跳跃表是如何实现的?原理?

文章目录 什么是跳跃表查找流程&#xff1a;为什么使用跳跃表?跳跃表是怎么实现的&#xff1f; PS:跳跃表是比较常问的一种结构。 什么是跳跃表 Skip Lists: A Probabilistic Alternative to Balanced Trees 跳跃表是一种可以用来代替平衡树的数据结构。跳跃表使用概率平衡…

类和对象一(从封装开始讲述)

目录&#xff1a; 一.封装 二.封装扩展之包&#xff0c;自定义包 三.访问限定符 四.static成员 一.封装&#xff1a;封装&#xff1a;将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细节&#xff0c;仅对外公开接口来和对象进行 交互。面向对象…

插件:Best HTTP

一、简介 WebSocket WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直接可以创建持久性的连接&#xff0c;并进行双向数据传输。…

MATLAB 多项式

MATLAB 多项式 MATLAB将多项式表示为行向量&#xff0c;其中包含按幂次降序排列的系数。例如&#xff0c;方程P(x) X 4 7 3 - 5 9可以表示为 p [1 7 0 -5 9]; 求值多项式 polyval函数用于求一个特定值的多项式。例如&#xff0c;在 x 4 时&#xff0c;计算我们之前的多项式…

图论专题训练

leecode 547 并查集 class Solution { public:int findCircleNum(vector<vector<int>>& isConnected) {ini();int len isConnected.size();for(int i0;i<len;i){for(int j0;j<len;j)if(isConnected[i][j]){unio(i,j);}}int ans 0;for(int i0;i<len;…

【一键录音,轻松转换:用Python打造个性化音频记录工具】

在数字化时代,音频记录已成为日常学习、工作和娱乐不可或缺的一部分。想象一下,只需简单按下几个键,即可随时随地捕捉灵感,记录会议要点,或是珍藏孩子的童言稚语。本文将引领您步入Python编程的奇妙世界,展示如何借助几个强大的库,构建一个既简单又实用的音频录制及转换…

58. 【Android教程】音频录制:MediaRecord

在第 57 节我们使用 MediaPlayer 实现了一个 mp3 播放器&#xff0c;除了播放 Android 还提供了 MediaRecorder 用于录音。Android 设备基本都会有一个麦克风&#xff0c;通过 MediaRecorder 可以打开麦克风进行语音采集&#xff0c;这一节我们就来学习如何在 Android 系统上实…

Python3 笔记:二进制的转换

十进制是逢十进一&#xff0c;二进制就是逢二进一。 十进制里最大的数字是9&#xff0c;二进制里最大的数字是1。 11010010001000010000010000001000000010^0110^11010^210010^3100010^41000010^510000010^6100000010^7100000002^012^122^242^382^4162^5322^6642^7128 1、十进…

Linux中创建共享文件夹

前言 从0开始记录我的学习历程&#xff0c;我会尽我所能&#xff0c;写出最最大白话的文章&#xff0c;希望能够帮到你&#xff0c;谢谢。 提示&#xff1a;文章作者为初学者&#xff0c;有问题请评论指正&#xff0c;感谢。 当我们再用虚拟机的Linux的时候经常会遇到Windows…

增强客户黏性:服装实体店扫码连锁收银软件提供多样的会员营销策略

随着消费者对购物体验的需求不断提升&#xff0c;服装实体店面临着更大的挑战和机遇。为了增强客户黏性&#xff0c;提升销售业绩&#xff0c;越来越多的服装实体店开始引入扫码连锁收银软件&#xff0c;并提供多样化的会员营销策略。这一举措不仅为店铺提供了更加智能化的经营…

python选修课期末考试复习

目录 记住输出小数的格式文件条件判断随想循环小星星计算金额猜数字折纸 函数找最大值 基础知识总结 记住输出小数的格式 输出a&#xff0c;保留两位小数 %.2f%a打开文件有点儿难&#xff0c;多记几遍格式吧 文件的格式后面有冒号&#xff0c;谨慎一点&#xff0c;都用双引号…

springfox.documentation.spi.DocumentationType没有OAS_30(从swagger2转到swagger3出现的问题)

直接开讲&#xff1a; 查看源码根本没有OAS_30的类型选择 右键package的springfox找到maven下载的包&#xff0c;打开到资源管理器 可以看到项目优先使用2版本的jar包&#xff0c;但是OAS_30只在3版本中才有&#xff0c;意思就是让项目优先使用以下图片中的3.0.0jar包 解决办法…

免费PDF批量加密工具

最近在找PDF批量加密的软件来着&#xff0c;发现很多都是需要收费的&#xff0c;当然如果平时工作需要用的比较多&#xff0c;支持一下还是ok的&#xff0c;但是多数人还是偶尔用一下所以没有必要买。 工作用的话&#xff0c;一般企业文件、个人隐私资料、重要合同...所有重要文…

本地项目上传到gitee

1. 新建仓库&#xff0c;不要勾选 2. git init git add . git commit -m "test" git remote add origin 【url】 git push --set-upstream origin master

js原型链与继承笔记

前置阅读&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain js中的“类”是一个函数。function test() {}中&#xff0c;test是由Function生成的。prototype与__proto__的区别&#xff1a; 前者是js函数&#xff08;C…