当前位置: 首页 > 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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...