C++奇迹之旅:string类对象的修改操作

请添加图片描述

文章目录

  • 📝string类的常用接口
  • 🌠 string类对象的修改操作
    • 🌉push_back
    • 🌉append
    • 🌉operator+=
    • 🌉insert
    • 🌉erase
    • 🌉replace
    • 🌉 find
    • 🌉 c_str
  • 🌠测试string
  • 🚩总结


📝string类的常用接口

string网址查询:https://legacy.cplusplus.com/reference/string/string/

🌠 string类对象的修改操作

函数名称功能说明
push_back在字符串后尾插字符c
append在字符串后追加一个字符串
operator+= (重点)在字符串后追加字符串str
c_str(重点)返回C格式字符串
find + npos(重点)从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
substr在str中从pos位置开始,截取n个字符,然后将其返回

🌉push_back

在这里插入图片描述
将字符 c 追加到字符串的末尾,将其长度增加 1

string s1("hello world");
cout << s1 << endl;
cout << s1.size() << endl;s1.push_back('x');
cout << s1 << endl;
cout << s1.size() << endl;

在这里插入图片描述

🌉append

在这里插入图片描述

  1. 在字符串后追加字符串
string s2("hello world");
s2.append(" yyyyyy");
cout << s2 << endl;
cout << s2.size() << endl;
cout << endl;

在这里插入图片描述

string s1("hello String");
s1.push_back('!');
cout << s1 << endl;string s2("hello world");
s2.append(" yyyyyy");
cout << s2 << endl;
cout << s2.size() << endl;
cout << endl;s1.append(s2);
cout << s2 << endl;

在这里插入图片描述

  1. 可以使用迭代器取某一部分字符串
string s1("hello String");
string s2("hello world");
s1.append(s2.begin() + 6, s2.end());
cout << s1 << endl;

在这里插入图片描述
综合其用法:

string str;
string str2 = "Writing ";
string str3 = "print 10 and then 5 more";// used in the same order as described above:
str.append(str2);                       // "Writing "
str.append(str3, 6, 3);                   // "10 "
str.append("dots are cool", 5);          // "dots "
str.append("here: ");                   // "here: "
str.append(10u, '.');                    // ".........."
str.append(str3.begin() + 8, str3.end());  // " and then 5 more"std::cout << str << '\n';
return 0;

在这里插入图片描述

🌉operator+=

在这里插入图片描述
用法:通过在当前值的末尾附加其他字符来扩展字符串:可以追加这string对象,字符串,字符
例子:

string name("John");
string family("Smith");
name += "K ";
name += family;
name += '\n';cout << name << endl;

在这里插入图片描述

🌉insert

在这里插入图片描述
例如:在字符串中指定位置插入其他字符

string s1("to be question");
string s2("the ");
string s3("or not to be");s1.insert(6, s2);
cout << s1 << endl;s1.insert(6, s3, 3, 4);
cout << s1 << endl;s1.insert(10, "that is cool", 8);
cout << s1 << endl;

在这里插入图片描述

🌉erase

在这里插入图片描述
功能:擦除部分字符串,减少其长度:
三种擦除:顺序擦除,指定擦除,范围擦除

string s1("This is an example sentence.");
cout << s1 << endl;//顺序擦除
s1.erase(10, 8);
cout << s1 << endl;//指定擦除
s1.erase(s1.begin() + 9);
cout << s1 << endl;//范围擦除:擦除 [first,last] 范围内的字符序列。
s1.erase(s1.begin() + 5, s1.end() - 9);
cout << s1 << endl;

在这里插入图片描述

🌉replace

在这里插入图片描述
功能:用新内容替换字符串中从字符 pos 开始并跨越 len 字符的部分(或字符串在 [i1,i2) 之间的部分):

string base("this is a test string.");
string s2("n example");
string s3("sample phrase");string s1 = base;
s1.replace(9, 5, s2);
cout << s1 << endl;s1.replace(19, 6, s3, 7, 6);
cout << s1 << endl;

在这里插入图片描述

详细可查看:https://legacy.cplusplus.com/reference/string/string/replace/

🌉 find

在这里插入图片描述

作用:用于在字符串中搜索指定子字符串或字符的第一次出现。
std::string::nposstd::string类的一个静态成员常量,表示当搜索的子字符串或字符未找到时,npos为无效值。

  1. 在字符串中搜索子字符串的位置:
#include <iostream>
#include <string>int main() 
{std::string str = "The quick brown fox jumps over the lazy dog.";std::string substr = "brown";size_t pos = str.find(substr);if (pos != std::string::npos) {std::cout << "Found '" << substr << "' at position: " << pos << std::endl;} else {std::cout << "'" << substr << "' not found in the string." << std::endl;}return 0;
}

输出:

Found 'brown' at position: 10
  1. 从指定位置开始搜索子字符串:
#include <iostream>
#include <string>int main() 
{std::string str = "The quick brown fox jumps over the lazy dog.";std::string substr = "the";size_t pos = str.find(substr, 15);if (pos != std::string::npos) {std::cout << "Found '" << substr << "' at position: " << pos << std::endl;} else {std::cout << "'" << substr << "' not found in the string." << std::endl;}return 0;
}

输出:

Found 'the' at position: 36
  1. 搜索字符:
#include <iostream>
#include <string>int main() 
{std::string str = "Hello, World!";char c = 'o';size_t pos = str.find(c);if (pos != std::string::npos) {std::cout << "Found '" << c << "' at position: " << pos << std::endl;} else {std::cout << "'" << c << "' not found in the string." << std::endl;}return 0;
}

输出:

Found 'o' at position: 4

🌉 c_str

在这里插入图片描述
它返回一个指向字符串内容的 C 风格字符串指针(以 null 字符结尾)。这个函数非常有用,因为它允许你将 std::string 对象传递给需要 C 风格字符串的函数

string str = "Hello,World!";//使用 c_str() 获取 C 风格字符串
const char* cstr = str.c_str();
cout << cstr << endl;

在这里插入图片描述

🌠测试string


// 测试string:
// 1. 插入(拼接)方式:push_back  append  operator+= 
// 2. 正向和反向查找:find() + rfind()
// 3. 截取子串:substr()
// 4. 删除:erase
void Teststring()
{string str;str.push_back(' '); // 在str后插入空格str.append("Hello");// 在str后追加一个字符"hello"str += 'S'; // 在str后追加一个字符'S' str += "tring"; //在str后追加一个字符串"tring"cout << str << endl;cout << str.c_str() << endl;//获取file的后缀string file("string.cpp");size_t pos = file.rfind('.');string suffix(file.substr(pos, file.size() - pos));cout << suffix << endl;//npos是string里面的一个静态变量//static const size_t npos = -1;//取出url中的域名string url("https://legacy.cplusplus.com/reference/string/string/find/");cout << url << endl;size_t start = url.find("://");if (start == string::npos){cout << "invalid url" << endl;return;}start += 3;size_t finsh = url.find('/', start);string address = url.substr(start, finsh - start);cout << address << endl;//删除url的协议前缀pos = url.find("://");url.erase(0, pos + 3);cout << url << endl;
}int main()
{Teststring();return 0;
}

在这里插入图片描述


🚩总结

注意:

  1. string尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c'三种的实现方式差不多,一般
    情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串。
  2. string操作时,如果能够大概预估到放多少字符,可以先通过reserve把空间预留好。
    请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据时代,如何准确查询并解读大数据信用报告?

在互联网时代&#xff0c;个人信息的安全和隐私保护愈发受到人们的关注。随着大数据技术的不断发展&#xff0c;越来越多的人开始关心自己的大数据报告。那么&#xff0c;如何找一个靠谱的地方查询个人大数据报告呢?本文将为您详细解答。 一、先了解大数据报告的含义 首先&…

四、 现行数据出境制度下的三条合规路径是什么?如何判断?

综合《网络安全法》《数据安全法》以及《个人信息保护法》这三大数据合规基本法律要求来看&#xff0c;企业开展数据出境活动时&#xff0c;应结合自身的主体类型、出境数据类型和数量&#xff0c;综合判断是否须要额外&#xff08;1&#xff09;申报并通过数据出境安全评估&am…

ASIL详解

概念 随着汽车新四化的发展&#xff0c;整车E/E系统的复杂性也不断增加&#xff0c;功能安全正成为一种更主流的要求。汽车安全完整性等级&#xff08;ASIL&#xff09;分解为实现更高水平的诊断覆盖度提供了可靠而稳健的途径&#xff0c;并在开发具有更高ASIL等级的安全关键系…

基于卷积神经网络的信号解卷积(简单版,MATLAB)

简单演示一下基于卷积神经网络的信号解卷积&#xff0c;有个大致印象即可。 构造卷积滤波器 r 0.9; % Define filter om 0.95; a [1 -2*r*cos(om) r^2]; b [1 r*cos(om)]; h filter(b, a, [zeros(1,38) 1 zeros(1,40)]); N 500; K 25; sigma 1; 绘制输入信号分量 s…

LabelImg下载及目标检测数据标注

为什么这一部分内容这么少会单独拎出来呢&#xff0c;因为后期会接着介绍YOLOv8中的其他任务&#xff0c;会使用其他软件进行标注&#xff0c;所以就单独区分开来每一个任务的标注方式了。 这一部分就介绍目标检测任务的标注&#xff0c;数据集是我从COCO2017Val中抽出来两类&a…

移动端自动化测试工具 Appium 之元素操作小技巧

文章目录 一、背景二、TestNG常用注解三、实战3.1、集成启动类3.2、采用xpath定位元素3.3、编写通用判断类3.4、编写测试类3.5、遍历实现 四、总结 一、背景 appium自动化工作中&#xff0c;元素操作最常用的就是Id/xpath&#xff0c;因为【appium1.5.0后&#xff0c;不支持使…

解决在Outlook中预定Teams会议不显示入会链接的问题

今天遇到一个很蛋疼的teams问题&#xff0c;花了点时间才解决。本来以为是很简单的问题&#xff0c;随便网上冲浪一下就能找到答案的&#xff0c;结果根本就没有好的解决方案&#xff0c;所以我分享出来希望后来的老哥少走点弯路。 问题描述 简单来说&#xff0c;就是在Outlo…

IST——In-System-Test

1、背景 安全性是自动驾驶平台的关键特性之一&#xff0c;而这些架构中使用的半导体芯片必须保证ISO 26262标准所要求的功能安全方面。为了监控由于现场缺陷导致的故障&#xff0c;在启动和/或关闭期间会自动运行系统内结构测试。当系统内测试&#xff08;IST&#xff0c;In-Sy…

【声明ACL权限】

声明ACL权限 当应用在申请权限来访问必要的资源时&#xff0c;发现部分权限的等级比应用APL等级高&#xff0c;开发者可以选择通过ACL方式来解决等级不匹配的问题。 举例说明&#xff0c;如果应用需要使用全局悬浮窗&#xff0c;需要申请 ohos.permission.SYSTEM_FLOAT_WINDO…

shell脚本脚本变量

shell脚本的概念&#xff1a; 1.讲要执行的命令按顺序保存到一个文本文件 2.给文件可执行权限 3.可以结合各种shell控制语句以完成更复杂的操作 linux中包含shell的文件有 [rootlocalhost ~]# cat /etc/shells /bin/sh #UNIX最初使用的 shell&#xff0c;已经被…

正点原子i.MX 93开发板,双核A55+M33+NPU,双路RS485FDCAN千兆网,异核/AI/工业开发!

正点原子i.MX 93开发板新品上市&#xff01;双核A55M33NPU&#xff0c;双路RS485&FDCAN&千兆网&#xff0c;异核/AI/工业开发&#xff01; NXP的i.MX系列是一系列面向多媒体和工业应用的ARM架构微处理器。从i.MX6U到i.MX93&#xff0c;这一系列经历了显著的发展&#x…

Vue框架学习记录

概览 前置知识 准备工作 安装环境准备 #安装node.js #安装npm #安装vue cli基于脚手架创建前端工程 方式一 #创建一个保存vue项目的目录&#xff0c;如vue_project #在vue_project下进入cmd vue create vue-demo-1方式二 #在cmd下输入 vue ui选择vue2#成功之后的界面#打开…

[oeasy]python0015_键盘改造_将esc和capslock对调_hjkl_移动_双手正位

键盘改造 &#x1f94b; 回忆上次内容 上次练习了复制粘贴 按键 作用 <kbd>y</kbd><kbd>y</kbd> 复制光标行代码 到剪贴板 <kbd>p</kbd> 粘贴剪贴板中的内容 <kbd>i</kbd> 切换到 插入模式 <kbd>h</kbd>…

DC-DC电路中电感的下方该不该挖空

DC-DC电路中的电感下方该不该挖空&#xff1f; 在回答这个问题之前&#xff0c;先来了解一下DC-DC电路中常见的功率电感类型 一&#xff0e;DC-DC电路常用功率电感类型 图1 DC-DC电路常用电感类型 这四种类型电感&#xff0c;按照无屏蔽电感→磁封胶半屏蔽电感→组装式全屏蔽…

DDM-MIMO-FMCW雷达MATLAB仿真

本文在前期TDM和BPM体制的基础上&#xff0c;仿真DDM体制下的调制解调和信号处理测距、测速、测角流程。 TDM和BPM相关可以看这两篇博文TDM(BPM)-MIMO-FMCW雷达仿真-CSDN博客&#xff0c;确定性最大似然&#xff08;DML&#xff09;估计测角-CSDN博客TDM(BPM)-MIMO-FMCW雷达仿真…

Gartner发布应对动荡、复杂和模糊世界的威胁形势指南:当前需要应对的12种不稳定性、不确定性、复杂和模糊的安全威胁

当今世界是动荡&#xff08;Volatile&#xff09;、复杂&#xff08;Complex&#xff09;和模糊&#xff08;Ambiguous&#xff09;的&#xff0c;随着组织追求数字化转型以及犯罪分子不断发展技术&#xff0c;由此产生的安全威胁也是波动性、不确定性、复杂性和模糊性的&#…

【LeetCode刷题记录】简单篇-108-将有序数组转换为二叉搜索树

【题目描述】 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 【测试用例】 示例1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,…

【功耗问题排查】

一、如何处理具体功耗case 在手机功耗测试中&#xff0c;因为我们在功耗测试中&#xff08;电源电压&#xff09;为固定值&#xff08;老手机一般为3.8V左右&#xff0c;现在的大多项目采用4V左右&#xff09;&#xff0c;那么的大小直接由决定&#xff0c;所以&#xff0c;在沟…

webassembly入门详解(C++)

一、环境配置 环境说明,操作系统为window操作系统。 1.1 下载和安装python 下载 需要python版本至少3.6版本 python下载地址:https://www.python.org/getit/ 安装 检测安装结果 win+R组合键->cmd->输入python->回车 1.2 下载和安装emsdk 下载 下载地址:https://gi…

vs2019 - 替换vs2019自带的cmake

文章目录 vs2019 - 替换vs2019自带的cmake概述笔记启动vs2019本地x64命令行的脚本查看vs2019自带的cmake的位置删掉旧版cmake将新版cmake的安装目录内容替换过来。查看vs2019本地x64命令行中的cmake版本配置为vs2019x64工程END vs2019 - 替换vs2019自带的cmake 概述 在看一个…