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.…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
