当前位置: 首页 > news >正文

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++ 中,字符串比较是通过比较两个字符串中的字符来确定它们之间的大小关系。字符串比较通常涉及以下几种情况:

  1. 相等性比较:判断两个字符串是否完全相等。
  2. 大小比较:确定两个字符串的大小关系,即确定一个字符串是位于另一个字符串之前、之后还是相等。

在 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中的字符串时&#xff0c;std::str…...

C语言头歌:指针进阶

第1关&#xff1a;输出若干个学生成绩中的最高分.要求用指针函数实现 任务描述 题目描述:读入n(1 < n < 1000)个学生的成绩&#xff0c;成绩都为整数&#xff0c;用指针函数求出若干个学生成绩的最高分。用数组名作为函数参数&#xff0c;指针作为函数返回值。 ####相关…...

【C++】一个求数组中最大元素的函数模板

题目 设计一个分数类 F r a c t i o n Fraction Fraction&#xff0c;再设计一个名为 M a x e l e m e n t Max_element Maxe​lement 的函数模板&#xff0c;能够求数组中最大的元素&#xff0c;并用该模板求一个 F r a c t i o n Fraction Fraction 数组中的最大元素。 C…...

SpringCloud Alibaba(保姆级入门及操作)

第一章 微服务概念 1.0 科普一些术语 科普一下项目开发过程中常出现的术语,方便后续内容的理解。 **服务器:**分软件与硬件,软件:类型tomcat这种跑项目的程序, 硬件:用来部署项目的电脑(一般性能比个人电脑好) **服务:**操作系统上术语:一个程序,开发中术语:一个…...

SpringBoot集成Activiti案例

前言 Activiti项目是一项新的基于Apache许可的开源BPM平台&#xff0c;从基础开始构建&#xff0c;旨在提供支持新的BPMN 2.0标准&#xff0c;包括支持对象管理组&#xff08;OMG&#xff09;&#xff0c;面对新技术的机遇&#xff0c;诸如互操作性和云架构&#xff0c;提供技…...

Vulnhub靶机:basic_pentesting_2

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.4&#xff09; 靶机&#xff1a;basic_pentesting_2&#xff08;10.0.2.7&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnhub.c…...

复试PAT乙级day33

PAT乙级1106~1110 1106_2019数列有一个测试点过不了 1109_擅长C 这题不会&#xff0c;通过的是别人的代码 1110_区块反转 这题跟1105_链表合并 的处理很像。值得注意的是分段区间翻转用 大转小转 的方式。这题也有一个测试点通不过。...

npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3

在使用npm时&#xff0c;有时候您可能会遇到类似以下错误的权限问题&#xff1a; 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年被评选为编程语言以来&#xff0c;Python在各大排行榜上一直都是名列前茅。目前&#xff0c;它在Tiobe指数中排名第三个&#xff0c;仅次于Java和C。随着该编程语言的广泛使用&#xff0c;基于Python的自动化测试框架也应运而生&#xff0c;且不断发展与丰富。 因此&am…...

人脸高清算法GFPGAN之TensorRT推理

1. 综述 最近由于做数字人项目&#xff0c;采用的是wav2lip GFPGAN进行人脸面部高清&#xff0c;但GFPGAN模型本身比较大&#xff0c;所以想着使用TensorRT来代替原始的pth推理看看能否提升运行速度&#xff0c;于是便开始了这趟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&#xff1a;输入图像Mat …...

2326. 王者之剑(网络流,最小割,最大权独立集,最小点权覆盖)

活动 - AcWing 给出一个 nm 网格&#xff0c;每个格子上有一个价值 vi,j 的宝石。 Amber 可以自己决定起点&#xff0c;开始时刻为第 0 秒。 以下操作&#xff0c;在每秒内按顺序执行。 若第 i 秒开始时&#xff0c;Amber 在 (x,y)&#xff0c;则 Amber 可以拿走 (x,y) 上的…...

内网信息搜集

目录 内网基础知识 基本流程图 怎么判断是否在域内 常规信息类收集-应用&服务&权限等 cs信息搜集 bloodhound安装及使用 内网基础知识 工作组&#xff1a;将不同的计算机按照功能分别列入不同的组&#xff0c;想要访问某个部门的资源&#xff0c;只要在【网络】里…...

微型力量,巨大作用:嵌入式技术的创新应用

微型力量&#xff0c;巨大作用&#xff1a;嵌入式技术的创新应用 嵌入式技术是一种将计算机技术嵌入到各种设备和系统中的技术&#xff0c;它的应用范围非常广泛&#xff0c;包括但不限于智能手机、智能家居、医疗设备、工业自动化等领域。这种微型的技术在各个领域中发挥着巨…...

华为 OD 一面算法原题

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

FPGA-学会使用vivado中的存储器资源ROM(IP核)

问题&#xff1a; 某芯片,有500个寄存器,需要在上电的时候由FPGA向这些寄存器中写入初始值,初始值已经通过相应的文档给出了具体值,这些值都是已知的。 分析关键点&#xff1a; 数据量比较多&#xff08;Verilog代码&#xff0c;通过case语句、always语句这种查找表的方式,数…...

自测-1 打印沙漏

文章预览&#xff1a; 题目算法代码 题目 算法 以前做过这个&#xff0c;那次是c语言写的&#xff0c;一点一点处理一层一层完成&#xff0c;这次我换了一种语言用了另一种思想使用递归去写&#xff0c;还是我们要先求出应该有多少层这个很容易&#xff0c;中间输出部分我们算…...

高级语言期末2009级B卷(计算机学院)

1.编写一个名为mystrcpy的函数&#xff0c;实现将字符串str1的偶数位子的字符的拷贝到另一个字符串str2中。并编写主函数&#xff0c;在主函数中从键盘读入一个长度<100的字符串str1&#xff0c;然后调用函数mystrcpy&#xff1b;最后输出str2&#xff0c;例如&#xff0c;读…...

c# using 用法

using命令空间 导入命名空间中的所有类型 如&#xff1a;using System.Text; using别名 using别名包括详细命名空间信息的具体类型&#xff0c;这种做法有个好处就是当同一个cs引用了两个不同的命名空间&#xff0c;但两个命名空间都包括了一个相同名字的类型的时候。当需要…...

【Django】执行查询—跨关系查询中的跨多值关联问题

跨多值查询 跨越 ManyToManyField 或反查 ForeignKey &#xff08;例如从 Blog 到 Entry &#xff09;时&#xff0c;对多个属性进行过滤会产生这样的问题&#xff1a;是否要求每个属性都在同一个相关对象中重合。 filter() 先看filter()&#xff0c;通过一个例子看&#xf…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...