C++第十七弹---string使用(下)

个人主页: 熬夜学编程的小林

💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】

目录

1、标准库中的string类

1.1、string类的常用接口说明

 1.1.1、string类对象的修改操作 

 1.1.2、string类对象非成员函数重载

总结


1、标准库中的string类

1.1、string类的常用接口说明

 1.1.1、string类对象的修改操作 

    1、 push_back(char c) //尾插一个字符
    2、 string& append(const string & str);//在字符串尾追加一个string类字符串
    3、 string& append(const char* s);//在字符串尾追加一个常量字符串
    4、 string& operator+= (const string & str);//在字符串尾追加一个string类字符串
    5、 string& operator+= (const char* s);//在字符串尾追加一个常量字符串
    6、 string& assign(const string & str);//把原来string类字符串替换成str类
    7、 string& assign(const char* s);//把原来string类字符串替换成常量字符串
    8、 string& insert(size_t pos, const string & str);//在pos位置插入类字符串
    9、 string& insert(size_t pos, const char* s);//在pos位置插入常量字符串
    10、string& erase (size_t pos = 0, size_t len = npos);//从pos位置删除len长度个字符,超过类大小则删除所有有效字符
    11、string& replace (size_t pos,  size_t len,  const string& str);//将原类的pos位置向后len个长度替换成str类
    12、string& replace (size_t pos,  size_t len,  const char* s);//将原类的pos位置向后len个长度替换成常量字符串
    13、void swap(string & str);//将原类与str类交换数据
    14、void pop_back();//尾删一个字符

注意:关于字符串修改的重载函数实在太多了,因此只举例了常见的函数进行使用。

int main()
{string s1;string s2("hello");s1.push_back('a');//在s1尾部插入字符as1.push_back('b');//在s1尾部插入字符bs1.push_back('c');//在s1尾部插入字符ccout << s1 << endl;//打印s1s1.append(s2);//在s1尾部追加string类s2cout << s1 << endl;s1.append("world");//在s1尾部追加world字符串cout << s1 << endl;s1 += s2;//在s1尾部追加string类s2cout << s1 << endl;s1 += "world";//在s1尾部追加world字符串cout << s1 << endl;s1.assign(s2);//将s1原来的字符替换成s2cout << s1 << endl;s1.assign("world");//将s1原来的字符替换成worldcout << s1 << endl;s1.insert(2, s2);//在2的位置插入string类s2cout << s1 << endl;s1.insert(3, "world");//在3的位置插入字符串worldcout << s1 << endl;s1.erase(2, 3);//从2的位置删除3个字符cout << s1 << endl;s1.replace(0, 4, s2);//从0的位置开始把4个位置替换成s2cout << s1 << endl;s1.replace(2, 3, "world");//从2的位置开始把3个位置替换worldcout << s1 << endl;cout << s2 << endl;s1.swap(s2);//将s1与s2数据交换cout << s1 << endl;cout << s2 << endl;s1.pop_back();//尾删一个字符cout << s1 << endl;return 0;
}

1.1.1、string类对象的字符串操作 

    1、 const char* c_str() const;//获取C格式常量字符串
    2、 size_t find (const string& str, size_t pos = 0) const;//从pos位置开始从前往后找与str相等的字符串,相等则返回该串第一个元素下标,否则返回npos
    3、 size_t find(const char* s, size_t pos = 0) const;//从pos位置开始从前往后找与s相等的字符串,相等则返回该串第一个元素下标,否则返回npos
    4、 size_t rfind (const string& str, size_t pos = npos) const;//从pos位置开始从后往前找与str相等的字符串,相等则返回该串第一个元素下标,否则返回npos
    5、 size_t rfind(const char* s, size_t pos = npos) const;//从pos位置开始从后往前找与s相等的字符串,相等则返回该串第一个元素下标,否则返回npos
    6、 size_t find_first_of(const string & str, size_t pos = 0) const;//从pos位置开始从前往后找与str其中一个字符相等的元素,找到则返回此元素下标,否则返回npos
    7、 size_t find_first_of(const char* s, size_t pos = 0) const;//从pos位置开始从前往后找与s其中一个字符相等的元素,找到则返回此元素元素下标,否则返回npos
    8、 size_t find_last_of(const string & str, size_t pos = npos) const;//从pos位置开始从后往前找与str其中一个字符相等的元素,找到则返回此元素下标,否则返回npos
    9、 size_t find_last_of(const char* s, size_t pos = npos) const;//从pos位置开始从后往前找与s其中一个字符相等的元素,找到则返回此元素下标,否则返回npos
    10、size_t find_first_not_of (const string& str, size_t pos = 0) const;//从pos位置开始从前往后找与str中字符都不相等的元素,找到则返回此元素下标,否则返回npos
    11、size_t find_first_not_of(const char* s, size_t pos = 0) const;//从pos位置开始从前往后找与s中字符都不相等的元素,找到则返回此元素下标,否则返回npos
    12、size_t find_last_not_of (const string& str, size_t pos = npos) const;//从pos位置开始从后往前找与str中字符都不相等的元素,找到则返回此元素下标,否则返回npos
    13、size_t find_last_not_of(const char* s, size_t pos = npos) const;//从pos位置开始从后往前找与s中字符都不相等的元素,找到则返回此元素下标,否则返回npos
    14、string substr (size_t pos = 0, size_t len = npos) const;//从pos位置截取len长度的子串

int main()
{string s("hello world");const char* str = s.c_str();//将C格式字符串赋值给strcout << str << endl;//打印str字符串string s1(":");string s2;const char* str1 = ":";string url("https://cplusplus.com/reference/string/string/");size_t pos1 = url.find(s1, 0);//从0位置开始从前往后找与s1相等的字符串cout << pos1 << endl;s2 = url.substr(0, pos1);//从0位置截取pos1长度的子串cout << s2 << endl;//打印上面子串size_t pos2 = url.find(str1, 0);//从0位置开始从前往后找与str1相等的字符串cout << pos2 << endl;s2 = url.substr(0, pos2);//从0位置截取pos2长度的子串cout << s2 << endl;//打印上面子串string s3 = "code.c.dir.exe";size_t pos3 = s3.rfind(".");//从npos位置开始从后往前找与.相等的字符cout << pos3 << endl;s2 = s3.substr(pos3);//从pos位置截取字符串cout << s2 << endl;//打印上面子串string s4 = "abcdef";cout << s4 << endl;//打印初始s4//将aeiou的字符均填充成*size_t pos4 = s4.find_first_of("aeiou", 0);//从0位置开始从前往后找与"aeiou"其中一个字符相等的元素while (pos4 != string::npos){s4[pos4] = '*';pos4 = s4.find_first_of("aeiou", pos4 + 1);}cout << s4 << endl;//打印填充后的s4return 0;
}

上述代码输出结果: 

注意:标准库中的npos源代码为:static const size_t npos = -1;

 1.1.2、string类对象非成员函数重载

    1、string operator+ (const string& lhs, const string& rhs);//在lhs尾部追加rhs字符串
    2、string operator+ (const char*   lhs, const string& rhs);//在rhs尾部追加lhs字符串
    3、bool operator== (const string& lhs, const string& rhs);//比较lhs与rhs字符串,逐个字符比较
    4、bool operator== (const char*   lhs, const string& rhs);//比较lhs与rhs字符串,逐个字符比较
    5、void swap (string& x, string& y);//将x字符串与y字符串交换,此处思想为交换指针
    6、istream& operator>> (istream& is, string& str);//输入运算符重载
    7、ostream& operator<< (ostream& os, const string& str);//输出运算符重载
    8、istream& getline(istream & is, string & str);//获取一行字符串

int main()
{string s1("hello");const char* str = "world";string s2;s2 = s1 + str;//类字符串+C常量字符串,传值返回尽量少用cout << s2 << endl;//输出运算符重载s2 = str + s1;//C常量字符串+类字符串cout << s2 << endl;string s3 = "hello";const char* str3 = "hello";cout << (s3 == str3) << endl;//左边类字符串 右边C格式字符串cout << (str3 == s3) << endl;cout << (s3 < str3) << endl;string s4 = "world";cout << s3 << endl;cout << s4 << endl;swap(s3, s4);//交换s3与s4,C++标准库有swap函数,此处还有不会出错?根据模板的规则,有现成的用现成的,因此没问题。string s5;//cin >> s5;//输入字符串给s5//cout << s5 << endl;getline(cin, s5);//获取一行字符串cout << s5 << endl;return 0;
}

 

总结


本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!

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

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

相关文章

牛客热题:有效括号

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;有效括号题目链接方法一&#x…

Mycat+Mysql搭建数据集群实现数据分片存储

前言 MyCAT介绍 * 一个彻底开源的,面向企业应用开发的“大数据库集群”; * 支持事务、ACID、可以替代MySQL的加强版数据库; * 一个可以视为“MySQL”集群的企业级数据库,用来替代昂贵的Oracle集群; * 一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL; * 一个新颖…

2024.5.1学习记录

1、代码随想录&#xff1a;贪心刷题 2、react 高级使用( hoc render、props、函数组件、serState 传送门等) 3、游山玩水

《拯救大学生课设不挂科第四期之蓝桥杯是什么?我是否要参加蓝桥杯?选择何种语言?如何科学备赛?方法思维教程》【官方笔记】

背景&#xff1a; 有些同学在大一或者大二可能会被老师建议参加蓝桥杯&#xff0c;本视频和文章主要是以一个过来人的身份来给与大家一些思路。 比如蓝桥杯是什么&#xff1f;我是否要参加蓝桥杯&#xff1f;参加蓝桥杯该选择何种语言&#xff1f;如何科学备赛&#xff1f;等…

JavaEE之线程(7)_单例模式(设计模式概念、单例模式优点、懒汉、饿汉模式)

一、什么是设计模式&#xff1f; 单例模式是设计模式中较为常见的一种。那么&#xff0c;什么是单例模式&#xff1f; 设计模式&#xff08;Design Pattern&#xff09;都是一些相对优秀的解决方案&#xff0c;很多问题都是典型的、有代表性的问题&#xff0c;学习设计模式&am…

为什么本科毕业后我坚定地选择了就业而不是考研?

大家好&#xff0c;我是小布丁。今天来聊聊我为什么本科毕业后选择了就业而不是考研。 在整个大学期间&#xff0c;我被亲戚拷问最多的问题就是&#xff1a;准备考研吗&#xff1f;相信很多大学生都遇到过这种情况吧。 如果你说准备还好&#xff0c;亲戚大概率就不会问下去&a…

元组推导式

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 使用元组推导式可以快速生成一个元组&#xff0c;它的表现形式和列表推导式类似&#xff0c;只是将列表推导式中的“[]”修改为“()”。例如&#xf…

python深入解析字符串操作的八大神技

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、字符串的长度与切片 示例代码 二、去除多余的空格 示例代码 三、字符串的开头与包含…

元组的创建和删除

目录 使用赋值运算符直接创建元组 创建空元组 创建数值元组 删除元组 自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 元组&#xff08;tuple&#xff09;是Python中另一个重要的序列结构&#…

关于堆排序

今天我们不刷力扣了&#xff0c;我们来复习&#xff08;手撕&#xff09;一下数据结构中的八大排序算法之一&#xff0c;堆排序 基本概念&#xff1a; 堆是一种特殊的树形数据结构&#xff0c;即完全二叉树。 堆分为大顶堆和小顶堆&#xff1a; 大顶堆&#xff1a;每个节点的值…

OrangePi KunPengPro | 开发板开箱测评之学习与使用

OrangePi KunPengPro | 开发板开箱测评之学习与使用 时间&#xff1a;2024年5月23日20:51:12 文章目录 OrangePi KunPengPro | 开发板开箱测评之学习与使用概述1.参考2.资料、工具3.使用3-1.通过串口登录系统3-2.通过SSH登录系统3-3.安装交叉编译工具链3-4.复制文件到设备3-5.第…

【组合数学】常考试题答案

一、单项选择题&#xff08;每小题3分&#xff0c;共15分&#xff09; 1. 用3个“1”和4个“0”能组成&#xff08; &#xff09;个不同的二进制数字。 A. 35 B. 36, C. 37, D. 38 2. 整除300的正整数的个数为&#xff08;  &#xff09;。 A. 14…

Anaconda+CUDA+CUDNN+Pycharm+Pytorch安装教程(第一节 Anconda安装)

1.选择和对应的anconda版本 官网地址&#xff1a;Index of / (anaconda.com) 下载地址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2.安装流程 (1)下载安装包 (2)点击next &#xff08;3&#xff09;点击I agree &a…

解决Flutter位于悬浮窗口时,应用Logo不更新问题

问题描述 我已经更换了应用Logo&#xff0c;但是发现应用处于悬浮窗口时&#xff0c;logo还是更改之前的&#xff1f;下面的图片只是示意。 解决方案 终端命令 rm -rf ~/Library/Developer/Xcode/DerivedData2.xcode视图内解决 先在顶部找到 Xcode --> Setting --> Lo…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建(wsl2+ubuntu+quem+xv6)

MIT6.S081&#xff08;操作系统&#xff09;学习笔记 操作系统入门系列-MIT6.828&#xff08;操作系统&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&am…

福昕PDF编辑器自定义快捷方式

你是否为用不惯福昕PDF编辑器自带的快捷键而发愁&#xff1f;今天&#xff0c;我和大家分享一下如何设置自己想要的快捷键方式&#xff0c;希望能对大家有帮助。 步骤一&#xff1a;打开福昕PDF编辑&#xff0c;并找到更多命令 步骤二&#xff1a;切换到键盘一栏&#xff0c;并…

分布式专题

一&#xff1a;分布式事务 1、理论基础 分布式事务主要区分本地事务 什么是本地事务&#xff08;Local Transaction&#xff09;&#xff1f;本地事务也称为数据库事务或传统事务&#xff08;相对于分布式事务而言&#xff09;。尤其对于数据库而言&#xff0c;为了数据安全…

Docker快速搭建Oracle服务

服务器&#xff1a;CentOS7.9 1.安装docker yum install -y docker 2. 设置镜像加速 修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值 阿里云的docker镜像需要自己注册账号&#xff0c;也可以不注册账号&#xff0c;直接使用下面的连接。 也可以写入多…

【C++ 】学习问题及补充

一.自定义类型不初始化直接就赋值&#xff0c;比如string类会怎么样 vectr<string>里已经给每个string对象已经分配好空间&#xff0c;为什么不初始化再赋值会报错 在C中&#xff0c;std::string类是一个动态字符串类&#xff0c;它内部管理着一个字符数组&#xff0c;用…

【蓝桥杯】国赛普及-

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using llunsigned long long; #define int ll const int N2e510; int k0; std::string s; int…