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

第一百一十六天学习记录:C++提高:STL-string(黑马教学视频)

string基本概念

string是C++风格的字符串,而string本质上是一个类
string和char区别
1、char
是一个指针
2、string是一个类,类内部封装了char*,管理这个字符串,是一个char型的容器。
特点:
string类内部封装了很多成员方法
例如:查找find,拷贝copy,删除delete替换replace,插入insert
string管理char
所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。

string构造函数

构造函数原型:

string();     //创建一个空的字符串 例如:string str;
string(const char* s);    //使用字符串s初始化
string(const string& str);    //使用一个string对象初始化另一个string对象
string(int n,char c);    //使用n个字符c初始化
#include<iostream>
using namespace std;
#include<vector>
#include<string>//string的构造函数//string();     //创建一个空的字符串 例如:string str;
//string(const char* s);    //使用字符串s初始化
//string(const string& str);    //使用一个string对象初始化另一个string对象
//string(int n, char c);    //使用n个字符c初始化void test01()
{string s1;//默认构造const char* str = "hello world";string s2(str);cout << "s2=" << s2 << endl;string s3(s2);cout << "s3=" << s3 << endl;string s4(20, 'a');cout << "s4=" << s4 << endl;
}int main()
{test01();return 0;
}

总结:string的多种构造方式没有可比性,灵活使用即可。

string赋值操作

功能描述:
给string字符串进行赋值

赋值的函数原型:

string& operator=(const char* s);	//char*类型字符串 赋值给当前的字符串
string& operator=(const string& s);	//把字符串s赋给当前的字符串
string& operator=(char c);			//字符赋值给当前的字符串
string& assign(const char* s);		//把字符串s赋给当前的字符串
string& assign(const char* s,int n);//把字符串s的前n个字符赋值给当前的字符串
string& assign(const string& s);	//把字符串s赋给当前字符串
string& assign(int n,char n);		//用n个字符c赋给当前字符串
#include<iostream>
using namespace std;
#include<string>//string& operator=(const char* s);	//char*类型字符串 赋值给当前的字符串
//string& operator=(const string& s);	//把字符串s赋给当前的字符串
//string& operator=(char c);			//字符赋值给当前的字符串
//string& assign(const char* s);		//把字符串s赋给当前的字符串
//string& assign(const char* s, int n);//把字符串s的前n个字符赋值给当前的字符串
//string& assign(const string& s);	//把字符串s赋给当前字符串
//string& assign(int n, char n);		//用n个字符c赋给当前字符串void test01()
{string str1;str1 = "hello world";cout << "str1=" << str1 << endl;string str2;str2 = str1;cout << "str2=" << str2 << endl;string str3;str3 = 'a';cout << "str3=" << str3 << endl;string str4;str4.assign("hello C++");cout << "str4=" << str4 << endl;string str5;str5.assign("hello C++",5);cout << "str5=" << str5 << endl;string str6;str6.assign(str5);cout << "str6=" << str6 << endl;string str7;str7.assign(18,'z');cout << "str6=" << str7 << endl;
}int main()
{test01();return 0;
}

总结:string的赋值方式很多,operator= 这种方式是比较实用的

string字符串拼接

功能描述:
实现在字符串末尾拼接字符串

函数原型:

string& operator+=(const char* str);	//重载+=操作符
string& operator+=(char c);					//重载+=操作符
string& operator+=(const string& str);	//重载+=操作符
string& append(const char* s);			//把字符串s连接到当前字符串结尾
string& append(const char* s,int n);	//把字符串s的前n个字符连接到当前的字符串结尾
string& append(const string& s);			//同string& operator+=(const string& str)
string& append(const string& s,int pos,int n);				//字符串s中从pos开始的n个字符连接到字符串结尾
#include<iostream>
using namespace std;
#include<string>//string& operator+=(const char* str);	//重载+=操作符
//string& operator+=(char c);					//重载+=操作符
//string& operator+=(const string& str);	//重载+=操作符
//string& append(const char* s);			//把字符串s连接到当前字符串结尾
//string& append(const char* s, int n);	//把字符串s的前n个字符连接到当前的字符串结尾
//string& append(const string& s);			//同string& operator+=(const string& str)
//string& append(const string& s, int pos, int n);				//字符串s中从pos开始的n个字符连接到字符串结尾void test01()
{string str1 = "我";str1 += "是谁";cout << "str1=" << str1 << endl;str1 += '?';cout << "str1=" << str1 << endl;string str2 = "Who am I?";str1 += str2;cout << "str1=" << str1 << endl;string str3 = "你";str3.append("是");cout << "str3=" << str3 << endl;str3.append("谁的谁?????",4);cout << "str3=" << str3 << endl;str3.append(str2);cout << "str3=" << str3 << endl;str3.append(str2,4,2);//截取cout << "str3=" << str3 << endl;
}int main()
{test01();return 0;
}

在这里插入图片描述

string查找和替换

功能描述:查找:查找指定字符串是否存在
替换:在指定的位置替换字符串
函数原型:

int find(const string& str,int pos=0) const;			//查找str第一次出现位置,从pos开始查找
int find(const char*s,int pos=0)const;					//查找s第一次出现位置,从pos开始查找
int find(const char*s,int pos,int n)const;				//从pos位置查找s的前n个字符第一次位置
int find(const char c,int pos=0)const;					//查找字符c第一次出现位置
int rfind(const string& str,int pos=npos)const;		//查找str最后一次位置,从pos开始查找
int rfind(const char* s,int pos=npos)const;			//查找s最后一次出现位置,从pos开始查找
int rfind(const char*s int pos,int n)const;				//从pos查找s的前n个字符最后一次位置
int rfind(const char c,int pos=0)const;					//查找字符c最后一次出现位置
string& replace(int pos,int n,const string& str)	//替换从pos开始n个字符为字符串str
string& replace(int pos,int n,const char* s)			//替换从pos开始的n个字符为字符串s
#include<iostream>
using namespace std;
#include<string>//字符串查找和替换//1、查找void test01()
{string str1 = "abcdefgde";//int pos = str1.find("de");int pos = str1.find("de",0);//3 没有则返回-1if (pos == -1){cout << "未找到字符串" << endl;}else{cout << "找到字符串,pos = " << pos << endl;}pos = str1.rfind("de");//7cout << "pos = " << pos << endl;
}
//rfind 和 find 区别
//rfind从右往左查找  find从左往右查找//2、替换void test02()
{string str1 = "abcdefg";//从1号位置起3个字符 替换为"1111111"str1.replace(1, 3, "1111111");cout << "str1 = " << str1 << endl;
}int main()
{//test01();test02();return 0;
}

string字符串比较

功能描述:
字符串之间的比较
比较方式:
字符串比较是按字符的ASCII码进行对比

= 返回 0
> 返回 1
< 返回 -1

函数原型:
1、int compare(const string& s)const; //与字符串s比较
2、int compare(const char* s)const; //与字符串s比较

#include<iostream>
using namespace std;
#include<string>//字符串比较void test01()
{string str1 = "hello";string str2 = "hello";if (str1.compare(str2) == 0){cout << "str1 等于 str2 " << endl;}else if (str1.compare(str2) > 0){cout << "str1 大于 str2 " << endl;}else{cout << "str1 小于 str2 " << endl;}
}int main()
{test01();return 0;
}

注:主要是用来比较是否相等,大于小于的意义不大。

string字符存取

string 中单个字符存取方式有两种
1、char& operator[](int n); //通过[]方式取字符
2、char& at(int n);通过at方式获取字符

#include<iostream>
using namespace std;
#include<string>//string 字符存取void test01()
{string str = "hello";//cout << "str=" << str << endl;//1、通过[]访问单个字符for (int i = 0; i < str.size(); ++i){cout << str[i] << " ";}cout << endl;//2、通过at方式访问单个字符for (int i = 0; i < str.size(); ++i){cout << str.at(i) << " ";}cout << endl;//修改单个字符str[0] = 'x';cout << "str=" << str << endl;str.at(1) = 'x';cout << "str=" << str << endl;
}int main()
{test01();return 0;
}

string 插入和删除

功能描述:
对string字符串进行插入和删除字符操作

函数原型:

string& insert(int pos,const char*s);    //插入字符串
string& insert(int pos,const string& str)//插入字符串
string& insert(int pos,int n,char c);		//在指定位置插入n个字符c
string& erase(int pos,int n=npos);		//删除从Pos开始的n个字符
#include<iostream>
using namespace std;
#include<string>//字符串 插入和删除void test01()
{string str = "hello";//插入str.insert(1, "111");cout << "str=" << str << endl;//h111ello//删除str.erase(1, 3);cout << "str=" << str << endl;
}int main()
{test01();return 0;
}

总结:插入和删除的起始下标都是从0开始

string子串

功能描述:
从字符串中获取想要的子串
函数原型:
string substr(int pos=0,int n =npos)const;//返回由pos开始的n个字符组成的字符串

#include<iostream>
using namespace std;
#include<string>//string 求子串void test01()
{string str = "abcdef";string subStr = str.substr(1, 3);cout << "subStr=" << subStr << endl;
}//实用操作
void test02()
{string email = "hello@sina.com";//从邮件地址中 获取 用户信息int pos = email.find('@');cout << pos << endl;string usrName = email.substr(0, pos);cout << usrName << endl;}int main()
{//test01();test02();return 0;
}

总结:灵活的运用求子串功能,可以在实际开发中获取有效的信息

相关文章:

第一百一十六天学习记录:C++提高:STL-string(黑马教学视频)

string基本概念 string是C风格的字符串&#xff0c;而string本质上是一个类 string和char区别 1、char是一个指针 2、string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char型的容器。 特点&#xff1a; string类内部封装了很多成员方…...

Meta-Transformer 多模态学习的统一框架

Meta-Transformer是一个用于多模态学习的新框架&#xff0c;用来处理和关联来自多种模态的信息&#xff0c;如自然语言、图像、点云、音频、视频、时间序列和表格数据&#xff0c;虽然各种数据之间存在固有的差距&#xff0c;但是Meta-Transformer利用冻结编码器从共享标记空间…...

tinkerCAD案例:24.Tinkercad 中的自定义字体

tinkerCAD案例&#xff1a;24.Tinkercad 中的自定义字体 原文 Tinkercad Projects Tinkercad has a fun shape in the Shape Generators section that allows you to upload your own font in SVG format and use it in your designs. I’ve used it for a variety of desi…...

list与流迭代器stream_iterator

运行代码&#xff1a; //list与流迭代器 #include"std_lib_facilities.h" //声明Item类 struct Item {string name;int iid;double value;Item():name(" "),iid(0),value(0.0){}Item(string ss,int ii,double vv):name(ss),iid(ii),value(vv){}friend ist…...

九耶:冯·诺伊曼体系

冯诺伊曼体系&#xff08;Von Neumann architecture&#xff09;是一种计算机体系结构&#xff0c;它由匈牙利数学家冯诺伊曼于1945年提出。冯诺伊曼体系是现代计算机体系结构的基础&#xff0c;几乎所有的通用计算机都采用了这种体系结构。 冯诺伊曼体系的核心思想是将计算机硬…...

探索UCI心脏病数据:利用R语言和h2o深度学习构建预测模型

一、引言 随着机器学习模型在实际应用中的广泛应用&#xff0c;人们对于模型的解释性和可理解性日益关注。可解释性机器学习是指能够清晰、透明地解释机器学习模型决策过程的一种方法和技术。在许多领域中&#xff0c;如医疗诊断、金融风险评估和自动驾驶等&#xff0c;解释模型…...

基于 moleculer 微服务架构的智能低代码PaaS 平台源码 可视化开发

低代码开发平台源码 低代码管理系统PaaS 平台 无需代码或通过少量代码就可以快速生成应用程序的开发平台。 本套低代码管理后台可以支持多种企业应用场景&#xff0c;包括但不限于CRM、ERP、OA、BI、IoT、大数据等。无论是传统企业还是新兴企业&#xff0c;都可以使用管理后台…...

xrdp登录显示白屏且红色叉

如上图所示&#xff0c;xrdp登录出现了红色叉加白屏&#xff0c;这是因为不正常关闭导致&#xff0c;解决方法其实挺简单的 #进入/usr/tmp cd /usr/tmp #删除对应用户的kdecache-** 文件&#xff08;我这里使用的是kde桌面&#xff09;&#xff0c;例如删除ywj用户对应的文件 …...

Docker安装 Mysql 8.x 版本

文章目录 Docker安装 Mysql 8.0.22Mysql 创建账号并授权Mysql 数据迁移同版本数据迁移跨版本数据迁移 Mysql 5.x 版本与 Mysql 8.x版本是两个大版本&#xff0c;这里演示安装Mysql 8.x版本 Docker安装 Mysql 8.0.22 # 下载mysql $ docker pull mysql 默认安装最新…...

【数理知识】刚体 rigid body 及刚体的运动

文章目录 1 刚体2 刚体一般运动1 平移运动2 旋转运动 Ref 1 刚体 刚体是指在运动中和受力作用后&#xff0c;形状和大小不变&#xff0c;而且内部各点的相对位置不变的物体。绝对刚体实际上是不存在的&#xff0c;只是一种理想模型&#xff0c;因为任何物体在受力作用后&#…...

【UE5 多人联机教程】03-创建游戏

效果 步骤 打开“UMG_MainMenu”&#xff0c;增加创建房间按钮的点击事件 添加如下节点 其中&#xff0c;“FUNL Fast Create Widget”是插件自带的函数节点&#xff0c;内容如下&#xff1a; “创建会话”节点指游戏成功创建一个会话后&#xff0c;游戏的其他实例即可发现&am…...

【时间序列预测 】M4

【时间序列预测 】M4 论文题目&#xff1a;The M4 Competition: 100,000 time series and 61 forecasting methods 中文题目&#xff1a; 论文链接&#xff1a; 论文代码&#xff1a; 论文团队&#xff1a; 发表时间&#xff1a; DOI: 引用&#xff1a; 引用数&#xff1a; 摘要…...

SpringCloud微服务实战——搭建企业级开发框架(五十三):微信小程序授权登录增加多租户可配置界面

GitEgg框架集成weixin-java-miniapp工具包以实现微信小程序相关接口调用功能&#xff0c;weixin-java-miniapp底层支持多租户扩展。每个小程序都有唯一的appid&#xff0c;weixin-java-miniapp的多租户实现并不是以租户标识TenantId来区分的&#xff0c;而是在接口调用时&#…...

Stability AI推出Stable Diffusion XL 1.0,文本到图像模型

Stability AI宣布推出Stable Diffusion XL 1.0&#xff0c;这是一个文本到图像的模型&#xff0c;该公司将其描述为迄今为止“最先进的”版本。 Stability AI表示&#xff0c;SDXL 1.0能生成更加鲜明准确的色彩&#xff0c;在对比度、光线和阴影方面做了增强&#xff0c;可生成…...

B076-项目实战--宠物上下架 展示 领养 收购订单

目录 上下架功能提供后台宠物列表实现 前台展示前台宠物列表和详情展示店铺展示 领养分析前台后端PetControllerPetServiceImpl 订单需求分析可能产生订单的模块订单模块额外功能 订单设计表设计流程设计 集成基础代码收购订单创建订单前端后端 上下架功能提供 后台宠物列表实…...

【iOS】—— 持久化

文章目录 数据持久化的目的iOS中数据持久化方案数据持久化方式分类内存缓存磁盘缓存 沙盒机制获取应用程序的沙盒路径沙盒目录的获取方式 持久化数据存储方式XML属性列表Preferences偏好设置&#xff08;UserDefaults&#xff09;数据库存储什么是序列化和反序列化&#xff0c;…...

教程 - 在 Vue3+Ts 中引入 CesiumJS 的最佳实践@2023

1. 本篇适用范围与目的 1.1. 适用范围 严格使用 Vue3 TypeScript 的前端项目&#xff0c;包管理器默认使用 pnpm 构建工具使用 Vite4 使用原生 CesiumJS 依赖做应用开发 客户端渲染&#xff0c;因为我不太熟悉 Vue 的服务端渲染&#xff0c;有本篇的介绍后&#xff0c;熟悉…...

最优化方法

一. 图论 1.最小生成树 图的生成树是它的一颗含有其所有顶点的无环连通子图,一 幅加权图的最小生成树(MST)是它的一颗权值(树中的所有边的权值之和) 最小的生成树 • 适用场景&#xff1a;道路规划、通讯网络规划、管道铺设、电线布设等 题目数据 kruskal算法 稀疏图&#x…...

Mongodb 多文档聚合操作处理方法二(Map-reduce 函数)

聚合 聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来&#xff1a; 将多个文档中的值分组在一起。 对分组数据执行操作以返回单个结果。 分析数据随时间的变化。 要执行聚合操作&#xff0c;您可以使用&#xff1a; 聚合管道 单一目的聚合方法 Map-reduce 函…...

ant design vue j-modal 修改高度

问题描述 今天在项目中遇到关于j-modal组件修改弹窗大小问题&#xff0c;我尝试使用直接使用:height"300"&#xff0c;没用效果&#xff0c;弹窗大小依然和没改之前一样&#xff0c;后来找到了这种方式可以去修改j-modal弹窗大小&#xff0c;下面来看下代码实现&…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...