C++初阶学习第六弹——string(1)——标准库中的string类

news2024/12/23 23:29:36

前言:

在前面,我们学习了C++的类与对象,认识到了C++与C语言的一些不同,今天,我们将进入C++的 关键部分——STL,学习完这部分之后,我们就可以清楚的认识到C++相比于C语言的快捷与便利

目录

一、为什么有string类

二、标准库中的string类

1、什么是string类

2、string的常用接口函数

2.1 string类对象的构造

2.2 string的容量操作

2.3 string类的访问与遍历

2.4 string类对象的修改

2.5 string类常用的非成员函数

三、总结


一、为什么有string类

在我们学习C语言的时候,有一个点是非常难处理的,那就是字符串,在我们对字符串访问,增删查改时都是非常不便的,所以我们封装了一个string类主要来处理字符串有关的问题

二、标准库中的string类

1、什么是string类

我们可以简单的把string类理解为变长的字符数组,我们可以对它进行增删查改等一系列操作,同时有一些列封装的接口函数提供给我们可以让我们直接使用,一般我们需要的功能函数都有

string类的成员函数:

class string
{
private:
	char* a;
	int _capacity;
	int _size;
};

2、string的常用接口函数

在使用string类时,必须包含#include头文件以及using namespace std;

这些接口函数的原理我们在后面再讲,下面我们就先讲一下这些接口函数的用法,学会了用法就可以直接使用string类来做题了,这部分内容没啥重点讲解的,下面主要是直接给出代码示例

2.1 string类对象的构造

代码实例:
#include<string>
#include<iostream>
using namespace std;
int main()
{
	string();               //1、构建了一个空的string对象,这个对象只在本行起作用,除非加const修饰

	string s1("abc");       //2、直接构造
	cout << "s1:" << s1 << endl;

	char arr[] = "abc";
	string s2(arr);         //3、用一个字符串的首地址来构造
	cout << "s2:" << s2 << endl;

	string s3 = s1;         //4、拷贝构造(用一个已经存在的类对象给另一个对象初始化)
	cout << "s3:" << s3 << endl;

	string s4(3, 'x');      //5、构造时将前N个赋值为同一个字符
	cout << "s4:" << s4 << endl;

	return 0;
}

运行结果:

2.2 string的容量操作

代码实例:
#include<string>
#include<iostream>
using namespace std;
int main()
{
	string s1("abcdef");
	cout <<"s1:"<< s1 << endl;

	cout << "size:" << s1.size() << endl;        //有效字符的个数
	cout << "length:" << s1.length() << endl;    //有效字符的个数
	//上面这两个功能上差别不大,一般我们用size()用的多一点

	cout << "capacity:" << s1.capacity() << endl;   
     //开辟的空间大小(当空间不够时会自动扩容,扩容空间为原空间的1.5倍(与环境有关))

	cout << "empty:" << s1.empty() << endl;     //检查字符串是否为空,0表示非空,1表示空

	s1.clear();                                 //清空字符串
	cout <<"s1:"<< s1 << endl;

	s1.reserve(100);                            //开辟指定大小空间(一般会多一点)
	cout << "capacity:" << s1.capacity() << endl;

	s1.resize(5, 'a');
	cout << "size:" << s1.size() << endl;
	cout << "s1:" << s1 << endl;

	return 0;
}

运行结果:

2.3 string类的访问与遍历

代码实例:

#include<iostream>
using namespace std;
#include<string>
int main()
{
	string s1("abcdef");

	//访问方法:下标访问法
	cout << s1[0] << endl;
	cout << s1[3] << endl;
	s1[0] = 'h';
	
	//1、下标遍历法
	cout << "下标遍历法:";
	for (int i = 0; i < s1.size(); i++)
	{
		cout << s1[i] << " ";
	}
	cout << endl;

	//2、迭代器法(正向)
	cout << "迭代器法(正向):";
	string::iterator it = s1.begin();
	for (; it != s1.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	//3、迭代器(反向)
	cout << "迭代器(反向):";
	string::reverse_iterator rit = s1.rbegin();
	while (rit != s1.rend())
	{
		cout << *rit << " ";
		rit++;
	}
	cout << endl;

	//范围for法
	cout << "范围for法:";
	for (auto e : s1)
	{
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

运行结果:

2.4 string类对象的修改

代码实例:

#include<iostream>
using namespace std;
#include<string>
int main()
{
	string s1("zhan");
	cout << s1 << endl;

	//push_back  在末尾加入字符
	cout << "push_back后:";
	s1.push_back('g');
	cout << s1 << endl;

	//append     在末端加入字符串
	cout << "append后:" ;
	s1.append(" san");
	cout << s1 << endl;

	//operator+= 在末端随意添加
	cout << "+=后:";
	s1 += " 18";
	cout << s1 << endl;

	//c_str    返回C格式字符串
	cout << "c_str:";
	const char* m = s1.c_str();
	cout << m << endl;

	//find  从pos位置开始查找字符并返回其位置
	cout << "find:";
	int npos1 = s1.find('a');
	cout << npos1 << endl;

	//rfind  从pos位置开始往前查找字符并返回其位置
	cout << "rfind:";
	int npos2 = s1.rfind('a');
	cout << npos2 << endl;

	//substr  从pos位置开始截取n个字符并返回
	cout << "substr后:";
	string tmp = s1.substr(npos1, npos2 - npos1);
	cout << tmp << endl;

	return 0;
}

运行结果:

2.5 string类常用的非成员函数

代码实例:

#include<iostream>
using namespace std;
#include<string>
int main()
{
	string s1("hello ");
	string s2("world");

	//operator+    涉及深层拷贝,不建议多用
	cout << "operator+后:";
	cout << operator+(s1, s2) << endl;

	//operator>>   输入运算符重载
	cout << "operator>>:";
	string s3;
	operator>>(cin,s3);
	cout << s3 << endl;

	//operator<<    输出运算符重载
	cout << "operator<<:";
	operator<<(cout, s1) << endl;

	//getline      获取一行字符串
	cout << "getline:";
	string s4;
	getline(cin, s4);    //这个在这个程序中测不出来,需要单独测试
	cout << s4 << endl;

	//relational operators   比较大小
	//这个函数库中有各种各样的比较函数(==、>、<......),函数类型为bool,感兴趣的可以自己探索一下

	return 0;
}

运行结果:

三、总结

上面的就是我们常用的string类的类成员函数以及类外函数,由于这些函数已经封装好了,所以我们平时可以直接使用,至于如何实现这些函数,我们下章再讲

感谢各位大佬观看,创作不易,还请一键三连!!!

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

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

相关文章

springboot房屋租赁系统

摘要 房屋租赁系统&#xff1b;为用户提供了一个房屋租赁系统平台&#xff0c;方便管理员查看及维护&#xff0c;并且可以通过需求进行设备信息内容的编辑及维护等&#xff1b;对于用户而言&#xff0c;可以随时进行查看房屋信息和合同信息&#xff0c;并且可以进行报修、评价…

面试集中营—rocketmq架构篇

一、基本定义 Apache RocketMQ 是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 可为分布式应用系统提供异步解耦和削峰填谷的能力&#xff0c;同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。 Topic&#xff1a;消息主题&…

基于yolov2深度学习网络的单人口罩佩戴检测和人脸定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..............................................................I0 imresize…

详述进程的地址空间

进程的地址空间 合法的地址 (可读或可写) 代码 (main, %rip 会从此处取出待执行的指令)&#xff0c;只读数据 (static int x)&#xff0c;读写堆栈 (int y)&#xff0c;读写运行时分配的内存 (???)&#xff0c;读写动态链接库 (???) 非法的地址 NULL&#xff0c;导致 se…

Arduino-ILI9341驱动-SPI接口TFTLCD实现触摸功能系列之触控开关二

Arduino-ILI9341驱动-SPI接口TFTLCD实现触摸功能系列之触控开关二 1.概述 这篇文章在触摸屏上绘制一个开关&#xff0c;通过点击开关实现控制灯的开关功能。 2.硬件 硬件连接参考第一篇文章介绍 Arduino-ILI9341驱动-SPI接口TFTLCD实现触摸功能系列之获取触控坐标一 3.实现…

使用Caché管理工具

Cach通过一个web工具来对其进行系统管理和完成管理任务,该方法的一个好处是不必将Cach安装到用于管理的系统上。目前,通过网络远程管理和控制对站点的访问,这些都比较容易。因为数据及其格式信息都直接来自被管理的系统,因此,这也可以最小化跨版本的兼容问题。 本文将描述…

【知识碎片】2024_05_14

本篇记录了两道关于位运算的选择题&#xff0c;和一道有点思维的代码题。 C语言碎片知识 求函数返回值&#xff0c;传入 -1 &#xff0c;则在64位机器上函数返回&#xff08; &#xff09; int func(int x) {int count 0;while (x){count;x x&(x - 1);//与运算} return c…

Java医院绩效核算系统与his对接所需数据有哪些?java+springboot+MySQL医院绩效管理系统-构建智慧医疗生态

Java医院绩效核算系统与his对接所需数据有哪些&#xff1f;javaspringbootMySQL医院绩效管理系统-构建智慧医疗生态 医院绩效核算系统与his对接所需数据 1、诊察工作量绩效&#xff1a;信息系统-财务权限-统计报表-报表浏览-财务常用报表-门诊医生工作量报表 2、判读及操作工…

微信小程序 - - - - - 使用TDesign库(微信小程序UI库)

使用TDesign库 1. 初始化依赖2. 安装TDesgin3. npm构建3. 修改 app.json 1. 初始化依赖 npm init -y2. 安装TDesgin yarn add tdesign-miniprogram -S --productionor npm install tdesign-miniprogram -S --production3. npm构建 3. 修改 app.json 将 app.json 中的 “styl…

CTF如何学习?

CTF如何学习&#xff1f;打CTF有什么用 CTF本身有几个常见的领域 MISC WEB [逆向 密码学](https://www.zhihu.com/search?q逆向 密码学&search_sourceEntity&hybrid_search_sourceEntity&hybrid_search_extra{“sourceType”%3A"answer"%2C"sourc…

ubuntu 22.04 安装 RTX 4090 显卡驱动 GPU Driver(PyTorch准备)

文章目录 1. 参考文章2. 检查GPU是Nvidia3. 卸载已有驱动3.1. 命令删除3.2. 老驱动包 4. 官网下载驱动5. 运行5.1. 远程安装关闭交互界面5.2. 运行5.3. 打开交互界面 6. 检测与后续安装 1. 参考文章 https://blog.csdn.net/JineD/article/details/129432308 2. 检查GPU是Nvid…

【MySQL】Mysql——安装指南(Linux)

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以; Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 3. 上传MySQL安装包 4. 创建目录,并解压 mkdir mysqltar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar -C mysql5. 安装mysql的安装包 …

CAPL入门之使用CAPL记录测试Logging

0 前言 以往测试的log都是直接从trace导出&#xff0c;但是最近发现trace中能导出的数据是有限的&#xff0c;如果测试的时间过长&#xff0c;新的数据就会把之前的数据全部覆盖&#xff0c;并且对于长时间的测试&#xff0c;直接导出trace的内容也会造成查找效率低下的问题。因…

iOS 创建pch文件

1.参考链接&#xff08;xcode8添加方法&#xff0c;之前的跟这个差不多&#xff09;&#xff1a; 参考链接 2.自我总结&#xff1a; &#xff08;1&#xff09;创建pch文件: 注意点&#xff1a;1&#xff09;注意选中所有的targets&#xff08;看图明义&#xff09; 2&…

关于链表相关的OJ题

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 一、 OJ题 返回倒数第K个节点&#xff1a; 1、遍历链表一遍:用2个指针&#xff0c;phead和ptail先让ptail先走k步&#xff0c;然后让2个指针一起走&#xff0c;快的走到NULL即…

计算机发展史故事【13】

微电脑先锋 与第一台电子计算机埃历阿克的命运相似&#xff0c;1974 年面世的“牛郎星”能否作为世界上第一台微电脑被载入史册&#xff0c;人们似乎也存在着分歧。 拥有微处理器发明权的英特尔公司&#xff0c;难道自己不会组装微电脑&#xff0c;非得罗伯茨来越俎代庖吗&…

从零开始:C++ String类的模拟实现

文章目录 引言1.类的基本结构2.构造函数和析构函数3.基本成员函数总结 引言 在C编程中&#xff0c;字符串操作是非常常见且重要的任务。标准库中的std::string类提供了丰富且强大的功能&#xff0c;使得字符串处理变得相对简单。然而&#xff0c;对于学习C的开发者来说&#x…

【考研数学】强化阶段,张宇《1000题》正确率达到多少算合格?

首次正确率在60%以上就算是合格&#xff01; 张宇老师的1000题真挺难的&#xff0c;所以如果第一次做正确率不高&#xff0c;不要太焦虑&#xff0c;1000题不管是难度&#xff0c;综合度还是计算量&#xff0c;都比其他的题集高一截。 大家真实的做题情况下&#xff0c;如果正…

前端工程化 - 快速通关 - ES6

目录 ES6 1.1 let 1.2 const 1.3解构 1.4链判断 1.5参数默认值 1.6箭头函数 1.7模板字符串 1.8Promise 1.9Async 函数 1.10模块化 ES6 ●ECMAScript&#xff08;ES&#xff09; 是规范、 JavaScript 是 ES 的实现 ●ES6 的第一个版本 在 2015 年 6 月发布&#xff0c…

【C语言习题】12.扫雷游戏

文章目录 1.扫雷游戏分析和设计1.1 扫雷游戏的功能说明1.2游戏界面&#xff1a;1.3游戏的分析和设计1.2.1 数据结构的分析1.2.2 ⽂件结构设计 2.扫雷游戏的代码实现3.代码讲解 1.扫雷游戏分析和设计 1.1 扫雷游戏的功能说明 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现…