STL:string的常见用法
目录
赋值和连接:
operator=: 赋值操作符:
assign(str): 将字符串赋值为另一个字符串:
+=: 字符串连接操作符:
访问和检查:
at(pos): 返回指定位置的字符,提供边界检查。
operator[]: 返回指定位置的字符,不进行边界检查。
front(): 返回字符串的第一个字符。
back(): 返回字符串的最后一个字符。
c_str(): 返回指向以 null 结尾的字符数组的指针。
data(): 返回指向字符串缓冲区的非 null 结尾字符数组的指针。
字符串信息:
length(), size(): 返回字符串的长度。
empty(): 检查字符串是否为空。
修改字符串:
insert(pos, str): 在指定位置插入字符串。
erase(pos, len): 删除从指定位置开始的指定长度的字符。
replace(pos, len, str): 用字符串替换从指定位置开始的指定长度的字符:
push_back(c): 在字符串末尾添加字符。
pop_back(): 删除字符串末尾的字符。
查找和比较:
find(str, pos): 在字符串中查找子串,从指定位置开始:
rfind(str, pos): 从字符串末尾开始查找子串,从指定位置开始。
substr(pos, len): 返回从指定位置开始的指定长度的子串:
compare(str): 比较字符串与另一字符串。
compare(pos1, len1, str): 比较字符串的子串与另一字符串。
赋值和连接:
operator=: 赋值操作符:
operator= 是 std::string 类的赋值操作符,用于将一个字符串赋值给另一个字符串。这个操作符提供了一种方便的方式来复制一个字符串的内容到另一个字符串中。以下是一个使用例子:
#include <iostream>
#include <string>int main() {// 使用默认构造函数创建空字符串std::string emptyString;// 检查字符串是否为空if (emptyString.empty()) {std::cout << "The string is empty." << std::endl;} else {std::cout << "The string is not empty." << std::endl;}// 输出字符串内容std::cout << "Empty String: " << emptyString << std::endl;return 0;
}
-
assign(str): 将字符串赋值为另一个字符串:
assign(str) 是 std::string 类的成员函数,用于将一个字符串赋值给另一个字符串。这个函数将目标字符串的内容替换为给定字符串的内容。以下是一个使用例子:
#include <iostream>
#include <string>int main() {// 定义两个字符串std::string str1 = "Hello";std::string str2 = "World";// 使用 assign 函数将 str1 的内容替换为 str2 的内容str1.assign(str2);// 输出结果std::cout << "str1: " << str1 << std::endl;return 0;
}
-
+=: 字符串连接操作符:
+= 是 std::string 类的成员运算符,用于将一个字符串连接到另一个字符串的末尾。这个操作符提供了一种方便的方式来执行字符串连接操作。以下是一个使用例子:
#include <iostream>
#include <string>int main() {// 定义两个字符串std::string str1 = "Hello, ";std::string str2 = "World!";// 使用 += 操作符将 str2 连接到 str1 的末尾str1 += str2;// 输出结果std::cout << "Concatenated String: " << str1 << std::endl;return 0;
}
Concatenated String: Hello, World!
访问和检查:
-
at(pos): 返回指定位置的字符,提供边界检查。 -
operator[]: 返回指定位置的字符,不进行边界检查。 -
front(): 返回字符串的第一个字符。 -
back(): 返回字符串的最后一个字符。 -
c_str(): 返回指向以 null 结尾的字符数组的指针。 -
data(): 返回指向字符串缓冲区的非 null 结尾字符数组的指针。
字符串信息:
-
length(),size(): 返回字符串的长度。 -
empty(): 检查字符串是否为空。
修改字符串:
-
insert(pos, str): 在指定位置插入字符串。
insert(pos, str) 是 std::string 类的成员函数,用于在目标字符串的指定位置 pos 处插入另一个字符串 str。以下是一个使用例子:
#include <iostream>
#include <string>int main() {// 定义一个字符串std::string str = "Hello, World!";// 在位置 7 插入字符串 "Beautiful "str.insert(7, "Beautiful ");// 输出结果std::cout << "Modified String: " << str << std::endl;return 0;
}
Modified String: Hello, Beautiful World!
在这个例子中,str.insert(7, "Beautiful "); 使用了 insert 函数,在字符串的位置 7 处插入了字符串 "Beautiful "。现在,str 的内容变为了 "Hello, Beautiful World!"。
这个函数允许在指定位置插入其他字符串,提供了一种方便的方式来修改字符串的内容。插入操作会在指定位置处打开一个空间,以容纳要插入的字符串。
-
erase(pos, len): 删除从指定位置开始的指定长度的字符。
erase(pos, len) 是 std::string 类的成员函数,用于删除目标字符串从指定位置 pos 开始的指定长度 len 的字符。以下是一个使用例子:
#include <iostream>
#include <string>int main() {// 定义一个字符串std::string str = "Hello, World!";// 删除从位置 7 开始的长度为 5 的字符str.erase(7, 5);// 输出结果std::cout << "Modified String: " << str << std::endl;return 0;
}
Modified String: Hello, !
在这个例子中,str.erase(7, 5); 使用了 erase 函数,从字符串的位置 7 开始删除长度为 5 的字符。现在,str 的内容变为了 "Hello!"。
这个函数提供了一种方便的方式来修改字符串,删除不需要的部分。如果需要删除的长度超过了目标字符串的长度,erase 会删除尽可能多的字符,如果 len 大于目标字符串从 pos 开始的可用长度,则删除到字符串的末尾。
-
replace(pos, len, str): 用字符串替换从指定位置开始的指定长度的字符:
replace(pos, len, str) 是 std::string 类的成员函数,用于用指定的字符串 str 替换目标字符串从指定位置 pos 开始的指定长度 len 的字符。以下是一个使用例子:
#include <iostream>
#include <string>int main() {// 定义一个字符串std::string str = "Hello, World!";// 用字符串 "Universe" 替换从位置 7 开始的长度为 5 的字符str.replace(7, 5, "Universe");// 输出结果std::cout << "Modified String: " << str << std::endl;return 0;
}
Modified String: Hello, Universe!
在这个例子中,str.replace(7, 5, "Universe"); 使用了 replace 函数,从字符串的位置 7 开始,用字符串 "Universe" 替换了长度为 5 的字符。现在,str 的内容变为了 "Hello, Universe!"。
这个函数提供了一种方便的方式来修改字符串的一部分。如果需要替换的长度超过了目标字符串的长度,replace 会替换尽可能多的字符,如果 len 大于目标字符串从 pos 开始的可用长度,则替换到字符串的末尾。
-
push_back(c): 在字符串末尾添加字符。 -
pop_back(): 删除字符串末尾的字符。
查找和比较:
-
find(str, pos): 在字符串中查找子串,从指定位置开始:
find(str, pos) 是 std::string 类的成员函数,用于在字符串中查找指定的子串,从指定位置 pos 开始。如果找到子串,则返回子串第一次出现的位置,否则返回 std::string::npos。以下是一个使用例子:
#include <iostream>
#include <string>int main() {// 定义一个字符串std::string str = "Hello, World!";// 在字符串中查找子串 "World",从位置 7 开始size_t foundPos = str.find("World", 7);// 输出结果if (foundPos != std::string::npos) {std::cout << "Substring found at position: " << foundPos << std::endl;} else {std::cout << "Substring not found." << std::endl;}return 0;
}
Substring found at position: 7
在这个例子中,str.find("World", 7); 使用了 find 函数,从位置 7 开始在字符串中查找子串 "World"。因为 "World" 子串从位置 7 开始确实存在,所以 foundPos 将会被赋值为该子串在字符串中的位置。输出结果将是 "Substring found at position: 7"。
如果指定位置之后没有找到子串,find 函数将返回 std::string::npos,表示未找到。这个函数提供了一种在字符串中查找子串的方便方法。
-
rfind(str, pos): 从字符串末尾开始查找子串,从指定位置开始。 -
substr(pos, len): 返回从指定位置开始的指定长度的子串:
substr(pos, len) 是 std::string 类的成员函数,用于返回从指定位置 pos 开始的指定长度 len 的子串。这个函数不修改原始字符串,而是返回一个新的 std::string 对象,包含从指定位置开始的指定长度的字符。以下是一个使用例子:
#include <iostream>
#include <string>int main() {// 定义一个字符串std::string str = "Hello, World!";// 提取从位置 7 开始的长度为 5 的子串std::string substring = str.substr(7, 5);// 输出结果std::cout << "Substring: " << substring << std::endl;return 0;
}
Substring: World
在这个例子中,str.substr(7, 5); 使用了 substr 函数,从字符串的位置 7 开始提取长度为 5 的子串。现在,substring 包含了 "World"。
这个函数允许你从字符串中提取子串,而不必修改原始字符串。返回的 std::string 对象可以独立使用,方便在程序中进行进一步的操作。
-
compare(str): 比较字符串与另一字符串。 -
compare(pos1, len1, str): 比较字符串的子串与另一字符串。
相关文章:
STL:string的常见用法
目录 赋值和连接: operator: 赋值操作符: assign(str): 将字符串赋值为另一个字符串: : 字符串连接操作符: 访问和检查: at(pos): 返回指定位置的字符,提供边界检查。 operator[]: 返回指定位置的字符…...
GBASE南大通用 ADO.NET 中的事务
GBASE南大通用 ADO.NET 中支持事务,可以使用GBASE南大通用Connection 对象的BeginTransaction 函数开始一个事务,并默认使用 ReadCommitted 模式初始化。 事务中可以对单个表执行多个操作,或者对多个表执行多个操作,在事务未提交…...
App(Android)ICP备案号查询——————高仿微信
😄 个人主页:✨拉莫帅-CSDN博客✨🤔 博文:132篇🔥 原创:130篇,转载:2篇🔥 总阅读量:388923❤️ 粉丝量:112🍁 感谢点赞和关注 &#x…...
修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)
现象: 这个问题是直接指向了我使用的第三方库good-storage,这是一个对localStorage/sessionStorage做了简单封装的库,因为项目代码有一个缓存cache.ts有用到 原因分析: 从表象上看是storage对象找不到getItem方法, 但…...
Educational Codeforces Round 160 (Div. 2) A~C(D,E更新中...)
A.Rating Increase(思维) 题意: 给出一个仅包含数字的字符串 s s s,要求将该字符串按以下要求分成左右两部分 a , b a,b a,b: 两个数字均不包含前导 0 0 0 两个数字均大于 0 0 0 b > a b > a b>a 如果…...
【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题
【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题 1)安装 Maven-Helper 插件2)Maven Helper 插件使用方法3)Idea-Maven 可视化依赖树 1)安装 Maven-Helper 插件 这里我们已经安装过了,如果没有安装过,点…...
C# WPF上位机开发(知识产权ip保护)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 上位机软件如果是和硬件模块搭配开发,这个时候大部分上位机基本上都是白送的,不会收取相关的费用。但是,如果上…...
【Jenkins】Pipeline 语法解析(声明式Pipeline)
文章目录 一、Sections1、agent(代理)agent 参数值 2、post3、stages(阶段)4、steps(步骤) 二、Directives 指令1、environment 环境变量2、options 配置选项可用的选项 options 3、parameters 参数可用的参…...
二叉树的最大深度(LeetCode 104)
文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一:深度优先搜索GolangC 方法二:广度优先搜索GolangC 参考文献 1.问题描述 给定一个二叉树 root ,返回其最大深度。 叉树的「最大深度」是指从根节点到最远叶子节点的最长路径上的节…...
03-数据结构-栈与队列
1.栈 栈和队列是两种操作受限的线性表。如上图所示显示栈的结构 栈:先进后出,入栈(数据进入) 和出栈(数据出去)均在栈顶操作。 常见栈的应用场景包括括号问题的求解,表达式的转换和求值&#…...
功能测试转向自动化测试 。10 年 心路历程——愿测试人不再迷茫
十年测试心路历程: 由于历史原因,大部分测试人员,最开始接触都是纯功能界面测试,随着工作年限,会接触到一些常用测试工具,比如抓包,数据库,linux 等。 我大学学的计算机专业&#…...
VIM ——Vimtutor 个人总结【从入门到精通】
精进 Vim 编辑器技能:从入门到精通 文章目录 精进 Vim 编辑器技能:从入门到精通学习资源[Vim 自带教程中文版 —— vimtutor-CSDN博客](https://blog.csdn.net/qq_40395874/article/details/116047253)[Learn Vimscript the Hard Way (stevelosh.com)](h…...
gitea分支、合并
一、创建分支,推送到远程仓库 git branch dev git checkout dev 或者可以使用合并的命令来完成上述两个步骤: git checkout -b dev在新分支上进行修改、提交代码等操作 接下来,将新分支推送到远程仓库。使用git push命令,并…...
探究 JavaScript 类型检查的利器:typeof 和 instanceof
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
VSCode报错插件Error lens
1.点击左侧扩展图标→搜索“error lens”→点击“安装” 2.安装成功页面如下: 3.代码测试一下:书写代码的过程中会出现红色提醒或红色报错 4.另外推荐小伙伴们安装中文插件,学习过程中会比较实用方便,需要安装中文插件的小伙伴请点…...
go-zero开发入门之gateway深入研究1
创建一个 gateway 示例: // main.go package mainimport ("flag""fmt""gateway/middleware""github.com/zeromicro/go-zero/core/conf""github.com/zeromicro/go-zero/gateway" )var configFile flag.String(&…...
【每日一题】反转二叉树的奇数层
文章目录 Tag题目来源题目解读解题思路方法一:广度优先搜索方法二:深度优先搜索 写在最后 Tag 【深度优先搜索】【广度优先搜索】【二叉树】【2023-12-15】 题目来源 2415. 反转二叉树的奇数层 题目解读 反转二叉树奇数层的节点。 解题思路 对于二叉…...
vue 项目配置反向代理导致项目白屏
问题:vue 项目配置反向代理导致项目白屏 一、现象描述 添加反向代理代码后,前端运行白屏 // 设置baseURL,8888是后端端口号,前端请求默认发送到baseURL的地址 var axios require(axios) axios.defaults.baseURL http://local…...
全国县级行政区点位数据,Shp+excel格式
基本信息. 数据名称: 县级行政区点位 数据格式: Shpexcel 数据时间: 2021年 数据几何类型: 点 数据坐标系: WGS84坐标系 数据来源:网络公开数据 数据字段: 序号字段名称字段说明1xzqhdm_1省代码2xzqhmc_1省名称3xzqhdm_2市代码4xzqhmc_2市代…...
文件包含的提升刷题
上一篇文章:一篇文章带你入门文件包含-CSDN博客 已经开始入门了文件包含,那现在开始拔高提升刷题! 1. 拿到题目后啥也没有,所以也不知道要读取啥文件,那就查看源代码。 直接看if的条件就可以知道一定要设置cookie&a…...
别再只查列表了!Flowable 7.x 待办任务‘状态’字段的实战设计与前端动态渲染
Flowable 7.x 待办任务状态引擎设计与前端动态交互实战 在当今企业级应用开发中,工作流引擎已成为复杂业务流程管理的核心基础设施。作为Activiti的下一代产品,Flowable 7.x在任务状态管理和前后端协同方面提供了更强大的能力。本文将深入探讨如何基于Fl…...
巧用Google Maps与ScreenToGif:零行程数据也能轻松生成动态路线图
1. 从零开始制作动态路线图的必备工具 最近有个朋友问我:"想给客户展示项目选址的交通路线,但实地考察还没开始,怎么做出专业的动态路线图?"这让我想起自己两年前第一次做商业提案时的窘境——当时为了展示物流配送路线…...
Layerdivider:零基础上手图像分层工具的完整指南
Layerdivider:零基础上手图像分层工具的完整指南 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 为什么自动分层总是不尽如人意?设…...
Qwen3.5-2B轻量化技术解析:模型剪枝+KV Cache优化如何降低70%显存占用
Qwen3.5-2B轻量化技术解析:模型剪枝KV Cache优化如何降低70%显存占用 1. 轻量化模型的核心价值 在AI模型部署领域,大模型的资源消耗一直是阻碍其广泛应用的瓶颈。Qwen3.5-2B作为一款仅20亿参数的多模态基础模型,通过创新的轻量化技术实现了…...
Ostrakon-VL终端实战:从扫码识别到生成抖音短视频脚本的创意延伸
Ostrakon-VL终端实战:从扫码识别到生成抖音短视频脚本的创意延伸 1. 像素特工终端介绍 想象你是一名零售侦探,手持的不是笨重的扫描枪,而是一个充满复古游戏风格的AI终端。这就是基于Ostrakon-VL-8B模型开发的像素风格交互界面,…...
抖音无水印视频批量下载全攻略:技术解析与实战指南
抖音无水印视频批量下载全攻略:技术解析与实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…...
从 Seata 1.x 升级到 2.0.0:Docker 环境下的平滑迁移与配置变更指南
从 Seata 1.x 升级到 2.0.0:Docker 环境下的平滑迁移与配置变更指南 分布式事务框架 Seata 2.0.0 版本带来了多项架构优化与功能增强,包括对 Raft 共识算法的原生支持、安全模块的全面升级以及配置管理机制的改进。对于已在生产环境部署 Seata 1.x 版本的…...
OFA视觉问答模型惊艳效果:复杂背景中主物体识别与属性描述能力
OFA视觉问答模型惊艳效果:复杂背景中主物体识别与属性描述能力 1. 模型效果惊艳展示 OFA视觉问答模型在复杂场景中的表现令人印象深刻。这个模型能够准确识别图片中的主要物体,并详细描述其属性特征,就像有一个专业的图像分析师在为你解读图…...
Port-Hamiltonian建模在ROS2中的实战:用Python实现双机器人能量交换仿真
Port-Hamiltonian建模在ROS2中的实战:用Python实现双机器人能量交换仿真 当两个机器人在协作搬运物体时,它们的能量如何通过接触点传递?当一群无人机编队飞行时,如何数学描述它们之间无形的能量交互?这正是Port-Hamilt…...
C++的std--ranges中的优化内联
C的std::ranges中的优化内联:提升性能的利器 在现代C编程中,std::ranges库的引入为算法和范围操作带来了更高的抽象性和灵活性。许多开发者可能忽略了其背后隐藏的性能优化潜力——尤其是通过内联机制实现的效率提升。本文将深入探讨std::ranges中的优化…...
