C++重新入门-string容器
目录
1.包含头文件
2.创建字符串
3.获取字符串长度
4.字符串拼接
5.字符串比较
相等性比较
大小比较
使用比较函数
6.访问字符串
7.查找子串
8.字符串修改
替换子串
插入字符或子串
删除字符或子串
9.提取子串
10.总结
当谈到C++中的字符串时,std::string
容器是一个非常方便且强大的工具。它是C++标准库中的一部分,提供了许多操作字符串的方法。下面是一个简单的解释和示例:
1.包含头文件
在使用 std::string
之前,需要包含 <string>
头文件。
#include <string>
2.创建字符串
你可以通过多种方式创建一个字符串对象。
std::string str1; // 空字符串
std::string str2 = "Hello"; // 使用字符串常量初始化
std::string str3("World"); // 使用构造函数初始化
std::string str4(5, 'X'); // 使用重复字符初始化,产生 "XXXXX"
3.获取字符串长度
你可以使用 size()
方法获取字符串的长度。
std::string str = "Hello";
int length = str.size(); // length 现在为 5
4.字符串拼接
使用 +
操作符可以将两个字符串拼接起来。
std::string str1 = "Hello";
std::string str2 = "World";
std::string combined = str1 + " " + str2; // combined 现在为 "Hello World"
5.字符串比较
在 C++ 中,字符串比较是通过比较两个字符串中的字符来确定它们之间的大小关系。字符串比较通常涉及以下几种情况:
- 相等性比较:判断两个字符串是否完全相等。
- 大小比较:确定两个字符串的大小关系,即确定一个字符串是位于另一个字符串之前、之后还是相等。
在 C++ 中,字符串比较通常使用 ==
、!=
、<
、<=
、>
和 >=
这些操作符来完成。这些操作符都是针对字符串的字符按顺序进行比较的。字符串比较是按字典序进行的,即从左到右依次比较字符,直到找到不同的字符或者一个字符串结束。
下面是字符串比较的一些示例:
相等性比较
std::string str1 = "apple";
std::string str2 = "banana";if (str1 == str2) {std::cout << "Strings are equal" << std::endl;
} else {std::cout << "Strings are not equal" << std::endl;
}
大小比较
std::string str1 = "apple";
std::string str2 = "banana";if (str1 < str2) {std::cout << "str1 comes before str2" << std::endl;
} else if (str1 > str2) {std::cout << "str1 comes after str2" << std::endl;
} else {std::cout << "str1 and str2 are equal" << std::endl;
}
使用比较函数
除了操作符外,你也可以使用 compare()
成员函数来进行字符串比较。这个函数返回一个整数,表示两个字符串的大小关系。
std::string str1 = "apple";
std::string str2 = "banana";int result = str1.compare(str2);if (result == 0) {std::cout << "Strings are equal" << std::endl;
} else if (result < 0) {std::cout << "str1 comes before str2" << std::endl;
} else {std::cout << "str1 comes after str2" << std::endl;
}
需要注意的是,compare()
函数返回值的含义是:
- 如果
result
为 0,则表示两个字符串相等。 - 如果
result
小于 0,则表示str1
在字典序上位于str2
之前。 - 如果
result
大于 0,则表示str1
在字典序上位于str2
之后。
这些是在 C++ 中进行字符串比较的基本方法。你可以根据实际需要选择适合的方法来比较字符串。
6.访问字符串
使用下标操作符 []
:你可以像访问数组一样使用下标来访问字符串中的字符。字符串的第一个字符索引是0。
std::string str = "Hello";
char ch = str[0]; // 访问第一个字符 'H'
使用 at()
成员函数:at()
函数提供了与下标操作符类似的功能,但它提供了越界检查,并在越界时引发 std::out_of_range
异常。
std::string str = "Hello";
char ch = str.at(1); // 访问第二个字符 'e'
7.查找子串
在 C++ 中,你可以使用 find()
方法来查找一个子串在字符串中的位置。find()
方法返回子串在字符串中第一次出现的位置索引,如果子串不存在,则返回 std::string::npos
。
以下是使用 find()
方法查找子串的示例:
#include <iostream>
#include <string>int main() {std::string str = "Hello World";// 查找子串 "World" 在字符串中的位置size_t found = str.find("World");if (found != std::string::npos) {std::cout << "Substring found at position: " << found << std::endl;} else {std::cout << "Substring not found" << std::endl;}return 0;
}
在这个示例中,字符串 "Hello World"
中的子串 "World"
被找到,并且它在字符串中的起始位置是6。如果子串不存在,则 find()
方法返回 std::string::npos
,表示子串未找到。
find()
方法还可以接受额外的参数,用于指定搜索的起始位置。例如,你可以从指定的位置开始搜索子串:
size_t found = str.find("World", 7); // 从索引 7 开始查找子串
这将从字符串中的索引7(包括索引7)开始查找子串 "World"
。
另外,如果你想反向查找子串,可以使用 rfind()
方法,它会从字符串的末尾开始搜索子串,类似于 find()
,但是从字符串的尾部向前搜索。
size_t found = str.rfind("World"); // 从末尾开始查找子串
这就是在 C++ 中查找子串的基本方法。你可以根据实际需求使用这些方法来查找并处理字符串中的子串。
8.字符串修改
替换子串
你可以使用 replace()
方法来替换字符串中的子串。这个方法允许你指定要替换的起始位置和长度,并提供替换的字符串。
#include <iostream>
#include <string>int main() {std::string str = "I like apples";// 替换 "apples" 为 "oranges"str.replace(str.find("apples"), 6, "oranges");std::cout << str << std::endl; // 输出:I like orangesreturn 0;
}
插入字符或子串
你可以使用 insert()
方法在字符串的指定位置插入字符或子串。
#include <iostream>
#include <string>int main() {std::string str = "Hello";// 在索引 5 处插入子串 " World"str.insert(5, " World");std::cout << str << std::endl; // 输出:Hello Worldreturn 0;
}
删除字符或子串
你可以使用 erase()
方法删除字符串中的字符或子串。
#include <iostream>
#include <string>int main() {std::string str = "Hello World";// 从索引 6 开始删除 5 个字符str.erase(6, 5);std::cout << str << std::endl; // 输出:Helloreturn 0;
}
9.提取子串
substr()
方法用于提取字符串中的子串,并返回一个新的字符串。它接受两个参数:起始位置和要提取的子串的长度。如果省略第二个参数,则提取从起始位置到字符串末尾的所有字符。
以下是 substr()
方法的基本用法示例:
#include <iostream>
#include <string>int main() {std::string str = "Hello World";// 从索引 6 开始提取子串,直到字符串末尾std::string sub1 = str.substr(6);std::cout << "Substring 1: " << sub1 << std::endl; // 输出:World// 从索引 0 开始提取长度为 5 的子串std::string sub2 = str.substr(0, 5);std::cout << "Substring 2: " << sub2 << std::endl; // 输出:Helloreturn 0;
}
在这个示例中,str.substr(6)
提取了从索引6开始到字符串末尾的子串,结果是 "World"
。而 str.substr(0, 5)
提取了从索引0开始长度为5的子串,结果是 "Hello"
。
substr()
方法非常有用,可以用于从字符串中提取感兴趣的部分,然后进行进一步处理。
10.总结
// 查找子串
size_t find(const std::string& str, size_t pos = 0) const;// 返回字符串长度
size_t size() const noexcept;// 比较字符串
int compare(const std::string& str) const noexcept;// 访问指定位置的字符
char& at(size_t pos);
const char& at(size_t pos) const;// 替换子串
void replace(size_t pos, size_t len, const std::string& str);// 插入子串
void insert(size_t pos, const std::string& str);// 删除子串
void erase(size_t pos, size_t len);// 提取子串
std::string substr(size_t pos, size_t len = std::string::npos) const;
相关文章:

C++重新入门-string容器
目录 1.包含头文件 2.创建字符串 3.获取字符串长度 4.字符串拼接 5.字符串比较 相等性比较 大小比较 使用比较函数 6.访问字符串 7.查找子串 8.字符串修改 替换子串 插入字符或子串 删除字符或子串 9.提取子串 10.总结 当谈到C中的字符串时,std::str…...
C语言头歌:指针进阶
第1关:输出若干个学生成绩中的最高分.要求用指针函数实现 任务描述 题目描述:读入n(1 < n < 1000)个学生的成绩,成绩都为整数,用指针函数求出若干个学生成绩的最高分。用数组名作为函数参数,指针作为函数返回值。 ####相关…...
【C++】一个求数组中最大元素的函数模板
题目 设计一个分数类 F r a c t i o n Fraction Fraction,再设计一个名为 M a x e l e m e n t Max_element Maxelement 的函数模板,能够求数组中最大的元素,并用该模板求一个 F r a c t i o n Fraction Fraction 数组中的最大元素。 C…...

SpringCloud Alibaba(保姆级入门及操作)
第一章 微服务概念 1.0 科普一些术语 科普一下项目开发过程中常出现的术语,方便后续内容的理解。 **服务器:**分软件与硬件,软件:类型tomcat这种跑项目的程序, 硬件:用来部署项目的电脑(一般性能比个人电脑好) **服务:**操作系统上术语:一个程序,开发中术语:一个…...
SpringBoot集成Activiti案例
前言 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构,提供技…...

Vulnhub靶机:basic_pentesting_2
一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.4) 靶机:basic_pentesting_2(10.0.2.7) 目标:获取靶机root权限和flag 靶机下载地址:https://download.vulnhub.c…...
复试PAT乙级day33
PAT乙级1106~1110 1106_2019数列有一个测试点过不了 1109_擅长C 这题不会,通过的是别人的代码 1110_区块反转 这题跟1105_链表合并 的处理很像。值得注意的是分段区间翻转用 大转小转 的方式。这题也有一个测试点通不过。...
npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3
在使用npm时,有时候您可能会遇到类似以下错误的权限问题: npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3 npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall open npm ERR! Error: EACCES: permission denie…...

震惊!python类型的自动化测试框架原来这么简单!
自2018年被评选为编程语言以来,Python在各大排行榜上一直都是名列前茅。目前,它在Tiobe指数中排名第三个,仅次于Java和C。随着该编程语言的广泛使用,基于Python的自动化测试框架也应运而生,且不断发展与丰富。 因此&am…...

人脸高清算法GFPGAN之TensorRT推理
1. 综述 最近由于做数字人项目,采用的是wav2lip GFPGAN进行人脸面部高清,但GFPGAN模型本身比较大,所以想着使用TensorRT来代替原始的pth推理看看能否提升运行速度,于是便开始了这趟windows1之下进行GFPGAN的trt推理的折腾之旅。…...

05 OpenCV图像混合技术
文章目录 理论算子示例 理论 其中 的取值范围为0~1之间 算子 addWeighted CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, double beta,double gamma, OutputArray dst, int dtype -1 ); 参数1:输入图像Mat …...

2326. 王者之剑(网络流,最小割,最大权独立集,最小点权覆盖)
活动 - AcWing 给出一个 nm 网格,每个格子上有一个价值 vi,j 的宝石。 Amber 可以自己决定起点,开始时刻为第 0 秒。 以下操作,在每秒内按顺序执行。 若第 i 秒开始时,Amber 在 (x,y),则 Amber 可以拿走 (x,y) 上的…...

内网信息搜集
目录 内网基础知识 基本流程图 怎么判断是否在域内 常规信息类收集-应用&服务&权限等 cs信息搜集 bloodhound安装及使用 内网基础知识 工作组:将不同的计算机按照功能分别列入不同的组,想要访问某个部门的资源,只要在【网络】里…...
微型力量,巨大作用:嵌入式技术的创新应用
微型力量,巨大作用:嵌入式技术的创新应用 嵌入式技术是一种将计算机技术嵌入到各种设备和系统中的技术,它的应用范围非常广泛,包括但不限于智能手机、智能家居、医疗设备、工业自动化等领域。这种微型的技术在各个领域中发挥着巨…...

华为 OD 一面算法原题
2.2 亿彩票公布调查结果 昨天,闹得沸沸扬扬的《10 万中 2.2 亿》的彩票事件,迎来了官方公告。 简单来说,调查结果就是:一切正常,合规合法。 关于福利彩票事件,之前的推文我们已经分析过。 甚至在后面出现《…...

FPGA-学会使用vivado中的存储器资源ROM(IP核)
问题: 某芯片,有500个寄存器,需要在上电的时候由FPGA向这些寄存器中写入初始值,初始值已经通过相应的文档给出了具体值,这些值都是已知的。 分析关键点: 数据量比较多(Verilog代码,通过case语句、always语句这种查找表的方式,数…...

自测-1 打印沙漏
文章预览: 题目算法代码 题目 算法 以前做过这个,那次是c语言写的,一点一点处理一层一层完成,这次我换了一种语言用了另一种思想使用递归去写,还是我们要先求出应该有多少层这个很容易,中间输出部分我们算…...
高级语言期末2009级B卷(计算机学院)
1.编写一个名为mystrcpy的函数,实现将字符串str1的偶数位子的字符的拷贝到另一个字符串str2中。并编写主函数,在主函数中从键盘读入一个长度<100的字符串str1,然后调用函数mystrcpy;最后输出str2,例如,读…...
c# using 用法
using命令空间 导入命名空间中的所有类型 如:using System.Text; using别名 using别名包括详细命名空间信息的具体类型,这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要…...

【Django】执行查询—跨关系查询中的跨多值关联问题
跨多值查询 跨越 ManyToManyField 或反查 ForeignKey (例如从 Blog 到 Entry )时,对多个属性进行过滤会产生这样的问题:是否要求每个属性都在同一个相关对象中重合。 filter() 先看filter(),通过一个例子看…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...