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

news2024/11/18 5:40:38

请添加图片描述

文章目录

  • 📝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.coloradmin.cn/o/1665018.html

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

相关文章

如何到《新英格兰医学杂志》 NEJM查找下载文献

《新英格兰医学杂志》NEJM是世界上阅读、引用最广泛、影响力最大的综合性医学期刊之一。NEJM集团出版的期刊还包括NEJM Journal Watch、NEJM Catalyst及NEJM Evidence。NEJM是一份全科医学周刊&#xff0c;出版对生物医学科学与临床实践具有重要意义的一系列主题方面的医学研究…

服务器远程桌面局域网连接不上的解决方法

在企业网络环境中&#xff0c;服务器远程桌面局域网连接不上是一个常见且棘手的问题。这种问题可能导致工作效率下降&#xff0c;甚至影响业务运营。因此&#xff0c;我们需要采取专业的方法来解决这一问题。 服务器远程桌面局域网连接不上的解决方法&#xff1a; 1、确保服务器…

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第7章 安装VMwareTools

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

[单机]完美国际_V155_GM工具_VM虚拟机

[端游] 完美国际单机版V155一键端PC电脑网络游戏完美世界幻海凌云家园 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是…

2023版brupsuite专业破解安装

安装教程&#xff0c;分两部分&#xff1a; 1、安装java环境、参考链接JAVA安装配置----最详细的教程&#xff08;测试木头人&#xff09;_java安装教程详细-CSDN博客 2、安装2023.4版本brupsuite&#xff1a;参考链接 2023最新版—Brup_Suite安装配置----最详细的教程&…

云启未来:“云计算与网络运维精英交流群”与“独家资料”等你来探索“

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ &#x1f680; 云计算与运维精英交流群诚邀您的加入…

基于双经度模型的鱼眼图像畸变校正

文章目录 1. 简介2. 基本原理基本思路从目标图到半球面模型的投影从半球面模型到鱼眼图像的投影正交投影等距投影 3.实际效果示例论文中的原图去畸变 4. 有意思的玩法5. 对生成的鱼眼图去畸变 1. 简介 算法来自论文《基于双经度模型的鱼眼图像畸变矫正方法》 2. 基本原理 基本…

【复利思维 + 项目成功方程式】用1年,超越别人38年!

复利思维—每天进步1%。 一年后会比现在的自己优秀38倍。在做任何事情时都要考虑&#xff0c;这件事是否能随着时间不断积累扩大&#xff0c;不能积累价值的事情要及时调整和止损。 在这个过程中&#xff0c;千万不要陷入心理暗示的陷阱&#xff0c;尤其是越想得到的&#xf…

ElasticSearch集群环境

ElasticSearch集群环境 1、Linux单机 下载地址&#xff1a;LINUX X86_64 (elastic.co) 下载之后进行解压 tar -zxf elasticsearch-7.8.0-linux-x86_64.tar.gz 名字太长了改个名字改成es mv elasticsearch-7.8.0 es因为安全问题&#xff0c;Elasticsearch 不允许 root 用户…

一文读懂NVIDIA AI全景:从芯片到应用,全面解析未来科技

英伟达 NVIDIA AI 全景解析 NVIDIA 概述 公司概况 NVIDIA作为全球顶尖科技公司&#xff0c;早期深耕图形处理器设计制造&#xff0c;现已跃升为人工智能领域的领军者&#xff0c;产品和服务覆盖AI应用的全方位&#xff0c;引领科技潮流。 NVIDIA&#xff0c;1993年创立于美国…

Linux进程间通信 pipe 实现线程池 命名管道 实现打印日志 共享内存代码验证 消息队列 信号量

文章目录 前言管道匿名管道 pipe测试管道接口 --> 代码验证管道的4种情况管道的5种特征 线程池案例代码实现&#xff1a;ProcessPool.ccTask.hpp检测脚本makefile 命名管道代码演示&#xff1a;makefilenamedPipe.hppserver.ccclient.cc 实现日志Log.hpp 共享内存共享内存原…

机器人系统ros2-开发实践08-了解如何使用 tf2 来访问坐标帧转换(Python)

tf2 库允许你在 ROS 节点中查询两个帧之间的转换。这个查询可以是阻塞的&#xff0c;也可以是非阻塞的&#xff0c;取决于你的需求。下面是一个基本的 Python 示例&#xff0c;展示如何在 ROS 节点中使用 tf2 查询帧转换。 本教程假设您已完成tf2 静态广播器教程 (Python)和tf…

车辆运动模型中LQR代码实现

一、前言 最近看到关于架构和算法两者关系的一个描述&#xff0c;我觉得非常认同&#xff0c;分享给大家。 1、好架构起到两个作用&#xff1a;合理的分解功能、合理的适配算法&#xff1b; 2、好的架构是好的功能的必要条件&#xff0c;不是充分条件&#xff0c;一味追求架构…

海外云手机解决海外社交媒体运营难题

随着全球数字化浪潮的推进&#xff0c;海外社交媒体已成为外贸企业拓展市场、提升品牌影响力的重要阵地。Tiktok、Facebook、领英、twitter等平台以其庞大的用户基础和高度互动性&#xff0c;为企业提供了前所未有的营销机会。本文将介绍如何通过海外云手机&#xff0c;高效、快…

[优选算法]------滑动窗⼝——209. 长度最小的子数组

目录 1.题目 1.解法⼀&#xff08;暴⼒求解&#xff09;&#xff08;会超时&#xff09;&#xff1a; 2.解法⼆&#xff08;滑动窗⼝&#xff09;&#xff1a; 1.算法思路&#xff1a; 2.手撕图解 3.代码实现 1.C 2.C语言 1.题目 209. 长度最小的子数组 给定一个含有 n…

pod介绍

一、前言 Pod 是 Kubernetes 中最小的部署单元&#xff0c;它可以包含一个或多个容器&#xff0c;以及共享的存储卷和网络命名空间&#xff0c;Pod 提供了一种抽象&#xff0c;用于组织和管理容器化的应用程序&#xff0c;并提供了一种灵活、轻量级的方式来部署和管理应用程序 …

基于JSP动漫论坛的设计与实现(四)

目录 功能模块测试 6.1 测试概述及所用方案 6.1.1软件测试概述 6.1.3 测试的步骤 6.1.4 测试的主要内容 6.1.5 测试方案 6.1.6测试设计 6.2 前端功能测试 6.2.1 登录功能测试 6.2.2 注册功能测试 6.2.3 发帖功能测试 6.2.4 回复帖子测试 6.3 后台功能测试 6…

ETL工具中JSON格式的转换方式

JSON的用处 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;其设计初衷是为了提升网络应用中数据的传输效率及简化数据结构的解析过程。自其诞生以来&#xff0c;JSON 已成为Web开发乃至众多软件开发领域中不可或缺的一部分&a…

C++:类与对象—继承

类与对象—继承 一、继承是什么&#xff1f;二、继承定义三、基类和派生类对象赋值转换四、继承中的作用域五、派生类的默认成员函数六、继承与友元七、继承与静态成员八、复杂的菱形继承及菱形虚拟继承九、继承的总结和反思十、考察重点 一、继承是什么&#xff1f; 继承(inh…

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三)

基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 大家继续看 https://lilianweng.github.io/posts/2023-06-23-agent/的文档内容 第二部分&#xff1a;内存 记忆的类型 记忆可以定义为用于获取、存储、保留以及随后检索信息的过程。人脑中有多…