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

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的常见用法

目录 赋值和连接&#xff1a; operator: 赋值操作符&#xff1a; assign(str): 将字符串赋值为另一个字符串&#xff1a; : 字符串连接操作符&#xff1a; 访问和检查&#xff1a; at(pos): 返回指定位置的字符&#xff0c;提供边界检查。 operator[]: 返回指定位置的字符…...

GBASE南大通用 ADO.NET 中的事务

GBASE南大通用 ADO.NET 中支持事务&#xff0c;可以使用GBASE南大通用Connection 对象的BeginTransaction 函数开始一个事务&#xff0c;并默认使用 ReadCommitted 模式初始化。 事务中可以对单个表执行多个操作&#xff0c;或者对多个表执行多个操作&#xff0c;在事务未提交…...

App(Android)ICP备案号查询——————高仿微信

&#x1f604; 个人主页&#xff1a;✨拉莫帅-CSDN博客✨&#x1f914; 博文&#xff1a;132篇&#x1f525; 原创&#xff1a;130篇&#xff0c;转载&#xff1a;2篇&#x1f525; 总阅读量&#xff1a;388923❤️ 粉丝量&#xff1a;112&#x1f341; 感谢点赞和关注 &#x…...

修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)

现象&#xff1a; 这个问题是直接指向了我使用的第三方库good-storage&#xff0c;这是一个对localStorage/sessionStorage做了简单封装的库&#xff0c;因为项目代码有一个缓存cache.ts有用到 原因分析&#xff1a; 从表象上看是storage对象找不到getItem方法&#xff0c; 但…...

Educational Codeforces Round 160 (Div. 2) A~C(D,E更新中...)

A.Rating Increase&#xff08;思维&#xff09; 题意&#xff1a; 给出一个仅包含数字的字符串 s s s&#xff0c;要求将该字符串按以下要求分成左右两部分 a , b a,b a,b&#xff1a; 两个数字均不包含前导 0 0 0 两个数字均大于 0 0 0 b > a b > a b>a 如果…...

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题 1&#xff09;安装 Maven-Helper 插件2&#xff09;Maven Helper 插件使用方法3&#xff09;Idea-Maven 可视化依赖树 1&#xff09;安装 Maven-Helper 插件 这里我们已经安装过了&#xff0c;如果没有安装过&#xff0c;点…...

C# WPF上位机开发(知识产权ip保护)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上位机软件如果是和硬件模块搭配开发&#xff0c;这个时候大部分上位机基本上都是白送的&#xff0c;不会收取相关的费用。但是&#xff0c;如果上…...

【Jenkins】Pipeline 语法解析(声明式Pipeline)

文章目录 一、Sections1、agent&#xff08;代理&#xff09;agent 参数值 2、post3、stages&#xff08;阶段&#xff09;4、steps&#xff08;步骤&#xff09; 二、Directives 指令1、environment 环境变量2、options 配置选项可用的选项 options 3、parameters 参数可用的参…...

二叉树的最大深度(LeetCode 104)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一&#xff1a;深度优先搜索GolangC 方法二&#xff1a;广度优先搜索GolangC 参考文献 1.问题描述 给定一个二叉树 root &#xff0c;返回其最大深度。 叉树的「最大深度」是指从根节点到最远叶子节点的最长路径上的节…...

03-数据结构-栈与队列

1.栈 栈和队列是两种操作受限的线性表。如上图所示显示栈的结构 栈&#xff1a;先进后出&#xff0c;入栈&#xff08;数据进入&#xff09; 和出栈&#xff08;数据出去&#xff09;均在栈顶操作。 常见栈的应用场景包括括号问题的求解&#xff0c;表达式的转换和求值&#…...

功能测试转向自动化测试 。10 年 心路历程——愿测试人不再迷茫

十年测试心路历程&#xff1a; 由于历史原因&#xff0c;大部分测试人员&#xff0c;最开始接触都是纯功能界面测试&#xff0c;随着工作年限&#xff0c;会接触到一些常用测试工具&#xff0c;比如抓包&#xff0c;数据库&#xff0c;linux 等。 我大学学的计算机专业&#…...

VIM ——Vimtutor 个人总结【从入门到精通】

精进 Vim 编辑器技能&#xff1a;从入门到精通 文章目录 精进 Vim 编辑器技能&#xff1a;从入门到精通学习资源[Vim 自带教程中文版 —— vimtutor-CSDN博客](https://blog.csdn.net/qq_40395874/article/details/116047253)[Learn Vimscript the Hard Way (stevelosh.com)](h…...

gitea分支、合并

一、创建分支&#xff0c;推送到远程仓库 git branch dev git checkout dev 或者可以使用合并的命令来完成上述两个步骤&#xff1a; git checkout -b dev在新分支上进行修改、提交代码等操作 接下来&#xff0c;将新分支推送到远程仓库。使用git push命令&#xff0c;并…...

探究 JavaScript 类型检查的利器:typeof 和 instanceof

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

VSCode报错插件Error lens

1.点击左侧扩展图标→搜索“error lens”→点击“安装” 2.安装成功页面如下&#xff1a; 3.代码测试一下&#xff1a;书写代码的过程中会出现红色提醒或红色报错 4.另外推荐小伙伴们安装中文插件&#xff0c;学习过程中会比较实用方便&#xff0c;需要安装中文插件的小伙伴请点…...

go-zero开发入门之gateway深入研究1

创建一个 gateway 示例&#xff1a; // 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题目来源题目解读解题思路方法一&#xff1a;广度优先搜索方法二&#xff1a;深度优先搜索 写在最后 Tag 【深度优先搜索】【广度优先搜索】【二叉树】【2023-12-15】 题目来源 2415. 反转二叉树的奇数层 题目解读 反转二叉树奇数层的节点。 解题思路 对于二叉…...

vue 项目配置反向代理导致项目白屏

问题&#xff1a;vue 项目配置反向代理导致项目白屏 一、现象描述 添加反向代理代码后&#xff0c;前端运行白屏 // 设置baseURL&#xff0c;8888是后端端口号&#xff0c;前端请求默认发送到baseURL的地址 var axios require(axios) axios.defaults.baseURL http://local…...

全国县级行政区点位数据,Shp+excel格式

基本信息. 数据名称: 县级行政区点位 数据格式: Shpexcel 数据时间: 2021年 数据几何类型: 点 数据坐标系: WGS84坐标系 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1xzqhdm_1省代码2xzqhmc_1省名称3xzqhdm_2市代码4xzqhmc_2市代…...

文件包含的提升刷题

上一篇文章&#xff1a;一篇文章带你入门文件包含-CSDN博客 已经开始入门了文件包含&#xff0c;那现在开始拔高提升刷题&#xff01; 1. 拿到题目后啥也没有&#xff0c;所以也不知道要读取啥文件&#xff0c;那就查看源代码。 直接看if的条件就可以知道一定要设置cookie&a…...

入门级银行测试岗位招聘,只需具备这些基本条件!

2023年应该说是超乎意外的寒冷&#xff0c;几乎算是百业凋零。充斥在各个地方各个行业的&#xff0c;更多的是裁员的消息&#xff0c;很少有以往的风风火火的招聘了。无论是金九银十还是在以往的淡季。 谁也不知道这样一个特殊的寒冬还有多久才能过去。但是无论面对什么样的局…...

组里新来了个00后,真卷不过....

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…...

python 命令添加参数

官网 argparse模块可以很容易地编写用户友好的命令行界面。程序定义它需要什么参数&#xff0c;argparse将找出如何从sys.argv中解析这些参数。argparse模块还会自动生成帮助和用法消息。当用户为程序提供无效参数时&#xff0c;该模块也会发出错误。 核心功能 argparse模块对…...

LVS负载均衡器(DR模式)+nginx七层代理+tomcat多实例+php+mysql 实现负载均衡以及动静分离、数据库的调用!!!

目录 前言 一、nfs共享存储&#xff0c;为两个节点服务器提供静态网页共享 二、nginx作为lvs的后端节点服务器&#xff0c;完成lo:0网卡配置&#xff0c;以及内核参数设置&#xff0c;还有设置路由表 步骤一&#xff1a;先完成nfs共享存储挂载 步骤二&#xff1a;完成lo:0网…...

jmx_exporter安装

下载 wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.13.0/jmx_prometheus_javaagent-0.13.0.jar 创建jmx_exporter.yml文件 文件内容为&#xff1a; rules: - pattern: ".*" 配置tomcatpinter/apache-tomcat-8.5.38/bin/ca…...

怎么给自己的微信公众号留言?

为什么公众号没有留言功能&#xff1f;根据要求&#xff0c;自2018年2月12日起&#xff0c;新申请的微信公众号默认无留言功能。有些人听过一个说法&#xff1a;公众号粉丝累计到一定程度或者原创文章数量累计到一定程度就可以开通留言功能。其实这个方法是2018年之前才可以&am…...

Unity中 URP 下的棋盘格Shader

文章目录 前言一、制作思路法1&#xff1a;使用纹理采样后&#xff0c;修改重铺效果法2&#xff1a;计算实现 二、粗略计算实现棋盘格效果1、使 uv.x < 0.5 区域 0 。反之&#xff0c; 0.52、使 uv.y < 0.5 区域 0 。反之&#xff0c; 0.53、使两个颜色相加4、取小数…...

杰发科技AC7840——SPM电源管理之低功耗模式

0、SPM简介 很早以前就听过低功耗模式&#xff0c;一直没有怎么深入了解&#xff0c;最近遇到几个项目都是跟低功耗有关。正好AutoChips的芯片都有电源管理的功能&#xff0c;在此借用AC7840的SPM对低功耗进行测试。 1、AC7840的5种功耗模式 2、AC7840的模式转换 3、唤醒 在…...

PCL 点云匹配 之NICP(Normal ICP)

一、概述 上面一篇中我们已经得出了一个结论&#xff0c;就是ICP虽然简单&#xff0c;但是也有明显的缺点 1、计算速度慢&#xff0c;收敛慢&#xff0c;迭代次数多 2、对内存的开销比较大 3、很容易陷入局部最优的困局 因此我们在经典ICP的基础上添加一两个约束&#xff1a; 第…...

华脉智联融合通信一张图

随着通信技术、信息技术以及互联网的发展&#xff0c;融合通信技术也日益发展成熟。融合通信系统作为常见的通信指挥调度系统&#xff0c;其发挥的功能也越来越强大&#xff0c;在不同行业中的应用也越来越丰富。 华脉智联深耕融合通信行业多年&#xff0c;自主研发的融合通信…...