STL——string详解

目录

💡介绍

💡string的基本操作

💡string的构造函数

💡string赋值操作

💡string字符串拼接

💡string的查找和替换

💡string字符串比较

💡string字符存取

💡string的插入和删除

💡string子串


💡介绍

本质:

  • string是C++风格的字符串,而string本质上是一个类

string和char*区别:

  • char*是一个指针
  •  string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器

特点:

string类内部封装了很多成员方法
例如: 查找find,拷贝copy,删除delete 替换replace,插入insertstring管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责

💡string的基本操作

💡string的构造函数

如何用string构造字符串

构造函数原型:

  • string();   //创建一个空的字符串 例如: string str;
  • string(const char* s);   //使用字符串s初始化
  • string(const string& str);  //使用一个string对象初始化另一个string对象
  • string(int n, char c);  //使用n个字符c初始化
string s1;//默认构造const char* str="hello world";
string s2(str);
cout<<s2<<endl;string s3(s2);
cout<<s3<<endl;string s4(10,'a');

💡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 c);                //用n个字符c赋给当前字符串
int main()
{string str1;str1 = "hello";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 world");cout << "str4=" << str4 << endl;string str5;str5.assign("hello world",5);cout << "str5=" << str5 << endl;string str6;str6.assign(10, 'a');cout << "str6=" << str6 << endl;return 0;
}

💡string字符串拼接

功能描述:

  • 实现在字符串末尾拼接字符串

函数原型:

  • string& operator+=(const char* str);           //重载+=操作符
  • string& operator+=(const 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);             //同operator+=(const string& str)
  • string& append(const string &s,int pos,int n);        //字符串s中从pos开始的n个字符连接到字符串结尾
int main()
{string str1="hello ";cout << "str1=" << str1 << endl;str1 += "world";cout << "str1=" << str1 << endl;str1 += ';';cout << "str1=" << str1 << endl;string str2 = "pubg";str1 += str2;cout << "str1=" << str1 << endl;string str3="I";cout << "str3=" << str3 << endl;str3.append(" love ");cout << "str3=" << str3 << endl;str3.append("game abd", 4);cout << "str3=" << str3 << endl;//str3.append(str2);//cout << "str3=" << str3 << endl;//str1=hello world;pubgstr3.append(str1, 12, 4);//只截取到pubg  参数2是从哪个位置开始截取,参数3是截取字符个数cout << "str3=" << str3 << endl;return 0;
}

💡string的查找和替换

功能描述:

  • 查找: 查找指定字符串是否存在
  • 替换: 在指定的位置替换字符串

函数原型:

  • int find(const string& str, int pos = e) const;          //查找str第一次出现位置,从pos开始查找
  • int find(const char* s, int pos = e) const;        //查找s第一次出现位置,从pos开始查找
  • int find(const char* s, int pos, int n) const;      //从pos位置查找s的前n个字符第一次位置
  • int find(const char c, int pos = e) 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 = e) 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

注意:rfind从右往左查

        find从左往右查

//字符串查找和替换
//查找
void test1()
{string str1 = "abcdefgde";int pos=str1.find("de");//从第一个字符开始找,存在则返回第一个字符的下标,不存在就返回-1cout << pos << endl;//rfind从右往左查//find从左往右查pos=str1.rfind("de");cout << pos << endl;}
//替换
void test2()
{string str1 = "abcdefg";//从下标为1的位置起三个字符替换为“1111”//去掉bcd ,插入“1111”str1.replace(1, 3, "1111");cout << str1 << endl;}
int main()
{//test1();test2();return 0;
}

💡string字符串比较

功能描述:

  • 字符串之间的比较

比较方式:

  • 字符串比较是按字符的ASCII码进行对比

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

函数原型:

  • int compare(const string &s) const; //与字符串s比较
  • int compare(const char *s) const;  //与字符串s比较
//string字符串比较
int main()
{string str1 = "hello";string str2 = "hello";if (str1.compare(str2) == 0){cout << "str1==str2" << endl;}string str3 = "ok";if (str1.compare(str3) < 0){cout << "str1<str3" << endl;}return 0;
}

💡string字符存取

string中单个字符存取方式有两种

  • char& operator[](int n);  //通过口方式取字符
  • char& at(int n);  //通过at方法获取字符
//string字符存取
int main()
{string str = "hello world";//通过[]访问单个字符for (int i = 0; i < str.size(); i++){cout << str[i] << " ";}cout << endl;//通过at访问单个字符for (int i = 0; i < str.size(); i++){cout << str.at(i) << " ";}cout << endl;//修改单个字符str[0] = 'x';cout << str << endl;str.at(0) = 'p';cout << str << endl;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个字符
//string的插入和删除
int main()
{string str = "hello";//起始下标都是0//插入str.insert(1, "111");//在指定位置之前插入cout << str << endl;//删除str.erase(1, 3);//从指定位置开始删除多少个cout << str << endl;return 0;
} 

💡string子串

功能描述:

  • 从字符串中获取想要的子串

函数原型:

  • string substr(int pos = ,int n = npos) const; //返回由ps开始的n个字符组成的字符串
//string子串
int main()
{string str = "abcdef";string subStr = str.substr(1, 3);//从某个位置开始截取多少个cout << "subStr=" << subStr << endl;string email = "wzh@qq.com";int pos = email.find("@");string s = email.substr(0, pos);cout << s <<endl;return 0;
}

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

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

相关文章

alibabaCloud学习笔记01(小滴课堂)

微服务架构常见的核心组件 讲解业务微服务架构常见解决方案 讲解AlibabaCloud核心组件介绍 创建数据库。 建表&#xff1a; 添加数据&#xff1a; 再建个用户库&#xff1a; 建表&#xff1a; 插入数据&#xff1a; 创建订单库&#xff1a; 建表&#xff1a; 创建项目&#x…

大数据时代的WEB运维高级架构师,Web系统运维工程师的实战成长之路

一、教程描述 本套WEB架构师教程&#xff0c;大小30.61G&#xff0c;共有183个文件。 二、教程目录 01-Web架构之单机时代&#xff08;共7课时&#xff09; 02-Web架构之集群时代&#xff08;共9课时&#xff09; 03-Web架构之DNS&#xff08;共6课时&#xff09; 04-Web…

常见的共轭先验分布

经常会遇到后验分布不能求解的问题&#xff0c;对于这个问题可以应用共轭先验分布解决&#xff0c;这些先验分布具有比较好的特征&#xff0c;能够使得出的后验分布和先验分布具有相同的分布族。如果一个具有参数属于分布的先验分布&#xff0c;则生成的后验分布也属于相同的分…

【InnoDB数据存储结构】第2章节:InnoDB行格式

目录结构 之前整篇文章太长&#xff0c;阅读体验不好&#xff0c;将其拆分为几个子篇章。 本篇章讲解 InnoDB 行格式。 InnoDB 行格式 InnoDB 一行记录是如何存储的&#xff1f; 这个问题是本文的重点&#xff0c;也是面试中经常问到的问题&#xff0c;所以就引出了下文的 …

【flink番外篇】9、Flink Table API 支持的操作示例(14)- 时态表的join(java版本)

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

Unity 基于UDP实现本地时间与网络时间校验 防客户端修改日期作弊

新建一个Unity GameObject 挂上NTPComponent脚本 时间校验 源码 using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using UnityEngine.Networking; using System.Text; using System.Net.Sockets; using System.Net; using Sys…

c# OpenCvSharp Cv2.Threshold()和Cv2.AdaptiveThreshold参数说明

一、 Cv2.Threshold()二值化的函数参数说明 Cv2.Threshold()是一个用于图像二值化的函数。具体来说&#xff0c;它会将图像中的每一个像素的灰度值与一个阈值进行比较&#xff0c;大于该阈值的像素会被赋值为最大灰度值(即 255)&#xff0c;小于该阈值的像素会被赋值为最小灰度…

Apollo感知模块 :传感器| 目标监测| 障碍物识别 | 模型管理

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…

用c语言以升序顺序显示15个单词,从键盘上输入15个单词,将其以升序顺序显示出来。(排序方法不限,单词不得雷同,而且单词须是正确的单词)

用c语言以升序顺序显示15个单词,从键盘上输入15个单词&#xff0c;将其以升序顺序显示出来。&#xff08;排序方法不限&#xff0c;单词不得雷同,而且单词须是正确的单词&#xff09; 以下是一个使用C语言实现的示例程序&#xff0c;可以从键盘上输入15个单词&#xff0c;并将它…

简易机器学习笔记(八)关于经典的图像分类问题-常见经典神经网络LeNet

前言 图像分类是根据图像的语义信息对不同类别图像进行区分&#xff0c;是计算机视觉的核心&#xff0c;是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像分类在许多领域都有着广泛的应用&#xff0c;如&#xff1a;安防领域的人脸识别和…

视频号频繁显眼!是资本的运作?还是互联网新风口到来?

视频号这个平台出现了&#xff0c;特别是在最近存在感越来越强&#xff0c;而且已经有些人开始在视频号当中购物了&#xff0c;这也就意味着&#xff0c;视频号电商出现了&#xff0c;腾讯也开始搞电商了。 很多人可能对视频号做电商这个事情呢&#xff0c;抱有一定的迟疑态度&…

【算法】数论---约数

约数里面的一个重要性质&#xff1a;一个数的约数都是成对存在的(以sqrt(x)为分界线) 一、求一个数的所有约数---试除法 int x; cin>>x; int yue[10000]{0},idx0; for(int i1;i<x/i;i) {if(x%i0){yue[idx]i;cout<<i<<" ";} }for(int iidx-1;i&…

深度学习:大规模模型分布式训练框架DeepSpeed

深度学习&#xff1a;大规模模型分布式训练框架DeepSpeed DeepSpeed简介DeepSpeed核心特点DeepSpeed如何工作&#xff1f;DeepSpeed如何使用&#xff1f;参考文献 DeepSpeed简介 随着机器学习模型变得越来越复杂和庞大&#xff0c;训练这些模型所需的计算资源也在不断增加。特别…

九州金榜|家庭教育小妙招如何培养孩子学习习惯

做小学老师的时候&#xff0c;很多家长都问过我同一个问题&#xff0c;孩子成绩差&#xff0c;如何提高孩子的成绩&#xff1f; 好像成绩是我们的家长判断孩子是否优秀的唯一标准&#xff0c;一切都是围绕着成绩说话&#xff0c;考好了表扬、鼓励&#xff0c;考不好就会被批评…

【UE5.1】给森林添加天气效果

在上一篇博客&#xff08;【UE5.1】程序化生成Nanite植被&#xff09;基础上给森林添加天气交互效果&#xff0c;角色和雪地、水坑的交互效果。 目录 效果 步骤 一、准备工作 二、添加超动态天空 2.1 修改时间 2.2 昼夜交替 三、添加超动态天气 3.1 改变天气 3.2 …

uniCloud 云数据库(新建表、增、删、改、查)

新建表结构描述文件 todo 为自定义的表名 表结构描述文件的默认后缀为 .schema.json 设置表的操作权限 uniCloud-aliyun/database/todo.schema.json 默认的操作权限都是 false "permission": {"read": false,"create": false,"update&quo…

html中的form表单以及相关控件input、文本域、下拉select等等的详细解释 ,点赞加关注持续更新~

文章目录 表单创建表单forminput 标签input标签的value属性设置input标签格式单选框多选框上传文件下拉菜单文本域设置文本域格式label 标签按钮 表单 作用&#xff1a;收集用户信息。 使用场景&#xff1a; 登录页面注册页面搜索区域 创建表单form <form action".…

DataGear 4.7.0 发布,数据可视化分析平台

DataGear专业版 1.0.0 正式发布&#xff0c;欢迎试用&#xff01; http://datagear.tech/pro/ DataGear 4.7.0 发布&#xff0c;严重漏洞和BUG修复&#xff0c;具体更新内容如下&#xff1a; 新增&#xff1a;HTTP数据集新增【编码请求地址】支持&#xff0c;可用于解决请求…

希亦、觉飞、小吉三款婴儿洗衣机大比拼!全方位对比测评

由于年龄幼小的婴儿的皮肤都非常的幼嫩&#xff0c;因此婴儿衣物材质的类型大部分都是采用为纯棉&#xff0c;并且婴儿的衣物不能够与大人的衣物一起进行混洗&#xff0c;容易把细菌感染到宝宝的衣物上&#xff0c;因此很多家庭为了保证宝宝衣服的有效清洁&#xff0c;避免交叉…

TXT文本删除第一行文本变成空要如何解决呢

首先大家一起来看下这个TXT文本里面有多行内容&#xff0c;想把开头第一行批量删除不要掉。 1..如果是一两个本可以手动删除也很方便哦&#xff0c;如果文本量比较大如几十几、几百个文本大家一直都选用《首助编辑高手》工具去批量操作哦。批量操作可以大大提高工作效率。接来看…