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…

MySQL视图教程(01):创建视图

MySQL 创建视图 在 MySQL 中&#xff0c; CREATE VIEW 语句用于创建一个数据库视图&#xff08;View&#xff09;。 MySQL 是一种常用的关系型数据库管理系统&#xff0c;提供了 CREATE VIEW 语法&#xff0c;用于创建视图&#xff08;View&#xff09;。视图是一种虚拟的表&…

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

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

QCC---DFU升级变更设备名和地址

QCC---DFU升级变更设备名和地址 这个很多人碰到这个疑问,升级了改不了设备名和地址 /******************************************************************************* Copyright (c) 2018 Qualcomm Technologies International, Ltd. FILE NAME sink_dfu_ps.c DESCRIPT…

2024.5.1学习记录

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

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

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

2023年信息素养大赛小学组C++智能算法复赛试题解析

2023年信息素养大赛小学组C++智能算法复赛真题 智能算法挑战复赛小学组(总共4道题)T1. 判断数字出现了几次 【题目描述】 给定一个正整数 n,判断从 1 到这个数本身的所有数中,一共出现了多少次数字k。 【输入格式】 输入共1行,包括一个正整数n和一个正整数k。(0<n<…

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

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

C#面:如果出现ASP.NET中的事件不能触发可能由于什么原因造成

当 ASP.NET 中的事件不能触发时&#xff0c;可能由以下几个原因造成&#xff1a; 事件绑定错误&#xff1a;请确保事件正确地绑定到相应的控件上。在 ASP.NET 中&#xff0c;可以通过在前端代码或者后端代码中使用事件处理程序来绑定事件。如果事件没有正确地绑定到控件上&…

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

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

js计算字符串大小存储所占字节数

在JavaScript中&#xff0c;计算字符串所占的大小&#xff08;占用的字节数&#xff09;并不直接&#xff0c;但可以通过一些方法间接得到。 我们需要知道一个前提&#xff0c;英文字母 lenght 和字节数是一样的&#xff1a;都是1&#xff0c;而中文 lenght1&#xff0c;字节数…

golang sqlite主从数据同步插件开发

### golang sqlite主从数据同步插件开发思路 参考Mysql的主从同步机制&#xff0c;Mysql是产生binlog&#xff0c;然后把binlog日志同步到从服务上。 同理&#xff0c;我们按sql执行顺序记录所有的增删改查的sql语句&#xff0c;然后调用接口把sql语句传到从服务上执行。 数…

关于软件设计模式的理解

系列文章 关于时间复杂度o(1), o(n), o(logn), o(nlogn)的理解 关于HashMap的哈希碰撞、拉链法和key的哈希函数设计 关于JVM内存模型和堆内存模型的理解 关于代理模式的理解 关于Mysql基本概念的理解 关于软件设计模式的理解 文章目录 前言一、软件设计模式遵循的六大原则…

前端面试题日常练-day35 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末。 1. 以下哪个是使用jQuery选择所有具有CSS类名"myClass"的元素的正确语法&#xff1f; a) $(".myClass") b) $("myClass") c) $("#myClass") d) $("…

FURNet问题

1. 为什么选择使用弱监督学习&#xff1f; 弱监督学习减少了对精确标注数据的依赖&#xff0c;这在医学图像处理中尤为重要&#xff0c;因为高质量标注数据通常需要大量专业知识和时间。弱监督学习通过利用少量标注数据或粗略标注数据来训练模型&#xff0c;降低了数据准备的成…

元组推导式

自学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中另一个重要的序列结构&#…

JavaScript 获取 HTML 中特定父元素下的子元素

JavaScript 获取 HTML 中特定父元素下的子元素 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>查找子元素示例</title> </head> <body><div id"parent"><p&…

CTF-web-攻防世界-2

1、newscenter (1)、访问网站&#xff0c;一个搜索栏&#xff0c;像是SQL注入漏洞&#xff0c;brup抓包尝试一下。 输入2/0、一个单引号、两个单引号、一个双引号、两个双引号等。发现只有一个单引号时&#xff0c;响应包content-length字段有非常明显的变化为0。说明有可能是…