【黑马程序员】STL容器之string

string

string 基本概念

string本质

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

string和char* 区别

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

特点

  • string 内部封装了很多成员方法
  • string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责

string构造函数

  • string的多种构造方式没有可比性,灵活使用即可

构造函数原型

  • 创建一个空字符串
string();   
  • 使用字符串s初始化
string(const char* s);  
  • 使用一个string对象初始化另一个string对象
string(const string& str);
  • 使用n个字符c初始化
string(int n, char c); 

代码示例

#include <iostream>
#include <string>using namespace std;// string构造函数
void test() {string s;cout << s << endl;string s1("aaaa");cout << s1 << endl;string s2(s1);cout << s2 << endl;string s3(5, 's');cout << s3 << endl;
}int main() {test();return 0;
}

运行结果

在这里插入图片描述

string的赋值操作

string赋值的函数原型

  • char*类型字符串赋值给当前的字符串
string& operator=(const char* s); 
  • 把字符串s赋值给当前的字符串
string& operator=(const string &s); 
  • 字符赋值给当前的字符串
string& operator=(char c); 
  • 把字符串s赋值给当前的字符串
string& assign(const char* s); 
  • 把字符串s的前n个字符赋值给当前的字符串
string& assign(const char* s, int n);  
  • 把字符串s赋值给当前的字符串
string& assign(const string &s); 
  • 用n个字符c赋值给当前的字符串
string& assign(int n, char c);  

代码示例

#include <iostream>
#include <string>using namespace std;void test() {string s;s = "asdfghjk";cout << "s: " << s << endl;string s1;s1 = s;cout << "s1: " << s1 << endl;string s2;s2 = 'a';cout << "s2: " << s2 << endl;string s3;s3.assign("asdfghjk");cout << "s3: " << s3 << endl;string s4;s4.assign("asdfghjk", 3);cout << "s4: " << s4 << endl;string s5;s5.assign(s3);cout << "s5: " << s5 << endl;string s6;s6.assign(5, 'f');cout << "s6: " << s6 << endl;
}int main() {test();return 0;
}

结果示例

在这里插入图片描述

string字符串拼接

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

函数原型

在这里插入图片描述

代码示例

#include <iostream>
#include <string>using namespace std;void test() {string str1 = "I";str1 += " am Tom.";cout << str1 << endl;str1 += " you are pig";cout << str1 << endl;str1 += str1;cout << str1 << endl;str1.append("xxx");cout << str1 << endl;string str2 = "hhhh";string str3 = "123456789";// 主叫从第i个字符之后的字符str2.append(str3, 5);cout << str2 << endl;// 主叫从第i个字符之后的n个 字符str2.append(str3, 5, 2);cout << str2 << endl;
}int main() {test();return 0;
}

运行结果

在这里插入图片描述

string查找和替换

功能描述

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

函数原型

在这里插入图片描述

字符串查找

  • find和rfind区别

    • find 从左往右找

    • rfind 从右往左找

  • 找到返回对应位置的下标,没找到返回-1

  • 代码示例

#include <iostream>
#include <string>using namespace std;void test() {string str1 = "abcdefghdeaa";// find 从左往右找int pos = str1.find("de");if (pos == -1) {cout << "未找到" << endl;} else {cout << "找到了,pos = " << pos << endl;}// rfind 从右往左找pos = str1.rfind("de");if (pos == -1) {cout << "未找到" << endl;} else {cout << "找到了,pos = " << pos << endl;}
}int main() {test();return 0;
}
  • 结果

在这里插入图片描述

字符串替换

  • replace在替换时,要制定从那个位置开始,多少个字符,替换的字符串
#include <iostream>
#include <string>using namespace std;void test() {string str = "asdfghjkl";str.replace(1, 4, "111111");cout << str << endl;
}int main() {test();return 0;
}
  • 结果

在这里插入图片描述

字符串比较

  • compare 内部实现:逐字符一个一个按ascii码比较

代码示例

#include <iostream>
#include <string>using namespace std;void test() {string str1 = "hello";string str2 = "hello";string str3 = "hello1";// compare 内部实现:逐字符一个一个按ascii码比较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() {test();return 0;
}

string字符存取

存取方式

  • 通过[]方式取字符:char& operator[](int n);

  • 通过at方法获取字符:char& at(int n);

代码示例

#include <iostream>
#include <string>using namespace std;void test() {string str = "sdsafs";cout << "通过[]方式访问:";for (int i = 0; i < str.size(); i++) {cout << str[i] << " ";}cout << endl;cout << "通过at方式访问:";for (int i = 0; i < str.size(); i++) {cout << str.at(i) << " ";}cout << endl;str[1] = 'a';cout << "通过[]方式访问修改后的字符:";for (int i = 0; i < str.size(); i++) {cout << str[i] << " ";}cout << endl;str.at(2) = 'c';cout << "通过at方式访问:";for (int i = 0; i < str.size(); i++) {cout << str.at(i) << " ";}cout << endl;
}int main() {test();return 0;
}

运行结果

在这里插入图片描述

string插入和删除

  • 对string字符串进行插入和删除字符操作

函数原型

在这里插入图片描述

代码示例

#include <iostream>
#include <string>using namespace std;void test() {string str = "hello";// insert 在指定位置插入指定字符串str.insert(1, "12345");cout << str << endl;// delete 删除指定位置开始的n个字符str.erase(1, 5);cout << str << endl;
}int main() {test();return 0;
}

运行结果

在这里插入图片描述

string字符串

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

函数原型

  • 返回由pos开始的n个字符组成的字符串:string substr(int pos=0,int n=npos) const;

代码示例

#include <iostream>
#include <string>using namespace std;void test() {string str = "hello";string sub = str.substr(1, 3);cout << sub << endl;
}int main() {test();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux第65步_学习“Makefie”

学习“Makefie”&#xff0c;为后期学习linux驱动开发做铺垫。 1、在“/home/zgq/linux/atk-mp1”创建一个“Test_MakeFile”目录用于学习“Makefie”。 打开终端 输入“cd /home/zgq/linux/回车”&#xff0c;切换到“/home/zgq/linux/”目录 输入“mkdir Linux_Drivers回…

Python 在Word中创建表格并填入数据、图片

在Word中&#xff0c;表格是一个强大的工具&#xff0c;它可以帮助你更好地组织、呈现和分析信息。本文将介绍如何使用Python在Word中创建表格并填入数据、图片&#xff0c;以及设置表格样式等。 Python Word库&#xff1a; 要使用Python在Word中创建或操作表格&#xff0c;需…

使用向量数据库pinecone构建应用06:日志系统异常检测 Anomaly Detection

Building Applications with Vector Databases 下面是这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

[Java 项目亮点] 三层限流设计

思路来源&#xff1a;bilibili 河北王校长 文章目录 面试官可能会问你能详细介绍一下Nginx的http_limit_req_module模块吗&#xff1f;你能解释一下如何在Nginx中配置http_limit_req_module模块吗&#xff1f;你知道如何调整Nginx的http_limit_req_module模块以适应不同的业务需…

Mybatis总结--传参

MyBatis 传递参数&#xff1a;从 java 代码中把参数传递到 mapper.xml 文件 六、一个简单参数&#xff1a; Dao 接口中方法的参数只有一个简单类型&#xff08; java 基本类型和 String &#xff09;&#xff0c; 占位符 #{ 任意字符 } &#xff0c;和方法的参数名无关…

Mac OS 搭建C++开发环境【已解决】

Mac OS 搭建C开发环境 文章目录 Mac OS 搭建C开发环境一、安装命令行工具&#xff1a;二、安装vscode三、安装gcc3.1 安装Homebrew3.2 安装gcc3.3 修改配置 四、更改VSCode默认编译器五、安装gdb六、安装Cmake && git七、编译运行 本地环境&#xff1a; Mac OS Sonoma …

VTK的渲染原理

下面三张图均是用VTK实现的&#xff0c;从中很容易看出它们渲染的效果是有区别的&#xff1a; 第一张图&#xff1a;过于明亮&#xff0c;看不到阴影&#xff0c;颜色过渡也不平缓&#xff1b; 第二张图&#xff1a;阴影过于明显&#xff0c;图整体不够明亮&#xff1b; 第三…

C++基础知识(四:类的学习)

类 类指的就是对同一类对象&#xff0c;把所有的属性都封装起来&#xff0c;你也可以把类看成一个高级版的结构体。 【1】定义 class 类名 { 访问权限:成员属性; 访问权限:成员方法; }访问权限&#xff1a; public:共有的&#xff0c;类内、类外和子类中都可以访问 private:私有…

接近于pi的程序

在一个平静的午后&#xff0c;两个神秘的数字悄然相遇了。它们分别是-1031158223和-328227871。这两个数字看起来普普通通&#xff0c;但谁知它们背后隐藏着一段令人惊叹的奇幻之旅。 这两个数字其实是π的两位探险家&#xff0c;它们决定通过一次除法运算来探索π的奥秘。它们…

怎么在线生成动态gif?这个网站一定要知道

静态图片是指一张固定的、不具有动态效果的图片。它通常是由像素点组成的&#xff0c;可以是照片、插图、图标等。静态图片只能呈现一种特定的场景或图像&#xff0c;不能展示动态变化。动态图片&#xff08;是由一系列静态图片组成的&#xff0c;通过快速连续播放这些画面&…

线程共享和非共享的资源及线程优缺点

注意&#xff1a;共享的内存地址空间中不包括栈&#xff1b;共享文件描述符表&#xff0c;表示&#xff0c;同一进程中线程可以操作同一文件。

使用代理IP技术实现爬虫同步获取和保存

概述 在网络爬虫中&#xff0c;使用代理IP技术可以有效地提高爬取数据的效率和稳定性。本文将介绍如何在爬虫中同步获取和保存数据&#xff0c;并结合代理IP技术&#xff0c;以提高爬取效率。 正文 代理IP技术是一种常用的网络爬虫技术&#xff0c;通过代理服务器转发请求&a…

力扣 48. 旋转图像

1.题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]…

探索设计模式的魅力:状态模式揭秘-如何优雅地处理复杂状态转换

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 探索设计模式的魅力&#xff1a;状态模式揭秘-如何优雅地处理复杂状态转换 文章目录 一、案例…

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-WatchDog

目录 一、 WATCHDOG 概述功能简介基本概念 二、WATCHDOG 模块相关API三、WATCHDOG HDF驱动开发3.1、开发步骤(待续...) 坚持就有收获 一、 WATCHDOG 概述 功能简介 看门狗&#xff08;Watchdog&#xff09;&#xff0c;又称看门狗计时器&#xff08;Watchdog timer&#xff0…

零基础学编程,编程简单学,中文编程工具下载及工具箱进度条构件的用法

一、前言 今天给大家分享的中文编程开发语言工具 进度条构件的用法。 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——常用工具下载——编程工具免费版下载及实例源码下载。 进度条 进度…

涵盖5大领域的机器学习工具介绍

随着数据的产生及其使用量的不断增加&#xff0c;对机器学习模型的需求也在成倍增加。由于ML系统包含了算法和丰富的ML库&#xff0c;它有助于分析数据和做出决策。难怪机器学习的知名度越来越高&#xff0c;因为ML应用几乎主导了现代世界的每一个方面。随着企业对这项技术的探…

信息检索(二):Dense Passage Retrieval for Open-Domain Question Answering

Dense Passage Retrieval for Open-Domain Question Answering 摘要1. 引言2. 背景3. DPR4. 实验设置5. 实验&#xff1a;文章检索6. 实验&#xff1a;问题问答7. 相关工作8. 结论参考资料 原文链接&#xff1a;https://aclanthology.org/2020.emnlp-main.550.pdf DPR 最早引入…

六、回归与聚类算法 - K-means算法

目录 1、K-means 聚类步骤 2、API 3、案例 4、性能评估指标 5、总结 线性回归欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、K-means 聚类步骤 2、API 3、案例 4、性能评估指标 5、总结

【数据结构与算法初学者指南】【冲击蓝桥篇】String与StringBuilder的区别和用法

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…