C++_简单模拟实现string的增删查改

目录

一、模拟reserve

二、模拟push_back

三、模拟append

四、模拟operator+=

五、模拟insert

六、模拟erase

七、模拟find

八、模拟substr


一、模拟reserve

要添加数据,首先要考虑的是扩容。有必要用reserve辅助扩容。reserve的作用就是给一个预期的值作为扩容后的大小,如果当前容量比预期的容量要小,就扩容到预期的容量。

二、模拟push_back

push_back顾名思义就是在字符串后插入字符。首先判断字符串长度和当前容量大小,如果字符串长度已经到了容量大小了,就用reserve扩容。之后再在字符串末尾加上终止符\0。

测试结果如下:

三、模拟append

和push_back不同,append是将字符串尾插到当前字符串。值得注意的是,扩容时不能简单地直接扩容到原来的二倍,而是至少扩容到当前字符串长度和尾插的字符串的长度的和。再使用strcpy将新的字符串尾插到当前字符串末尾。

测试一波:

四、模拟operator+=

+=和push_back还有append差别并不大,况且+=的内部就是用push_back和append实现的。只是用起来更方便而已。+=的实现有两种,一种是一个字符,还有一种是字符串,这需要重载实现。

测试:

五、模拟insert

insert也有两种,第一种就是给出要插入的字符、字符个数以及要插入的位置。第二种是给出要插入的字符串以及要插入的位置。需要用重载来实现。

在模拟之前需要在自己的string类和命名空间中定义如下成员:

 

测试:

 

六、模拟erase

要擦除n个字符,就需要在erase中提供擦除的起点,以及要擦除的字符数量。首先判断是不是全部删除(即不给len赋值)或者要删除的字符数量和起始位置的和超过了字符串长度,是的话就在合适的位置赋值\0就可以,否则就要挪动字符,然后在末尾赋值\0

测试:

七、模拟find

find可以查找字符,也可以查找字符串,所以就需要重载。值得注意的是,查找字符时,一旦找到就返回下标,而不再查找有没有下一个字符。

测试:

八、模拟substr

substr的作用是找子字符串,给初始位置和子字符串长度后返回找到的子字符串。

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

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

相关文章

2023金九银十大厂 Java 面试八股文大全(整理版)附答案详解

Java 面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。现如今,Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好。…

STM32 Proteus仿真空气质量检测环境监测苯PM2.5 MQ135温度湿度 -0068

STM32 Proteus仿真空气质量检测环境监测苯PM2.5 MQ135温度湿度 -0068 Proteus仿真小实验: STM32 Proteus仿真空气质量检测环境监测苯PM2.5 MQ135温度湿度 -0068 功能: 硬件组成:STM32F103R6单片机 LCD1602显示器DHT11温度湿度多个按键蜂鸣…

Visual Studio 2017下的C++开发环境搭建

Visual Studio 是Microsoft旗下的开发工具包系列产品,是一个基本完整的开发工具集,它包括整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等,是最流行的Windows平台应用程序的集成开发环境。…

ESPHOME max7219点阵时钟

Note ESPHome中max7219digit驱动仅支持驱动点阵显示,对于7段数码管,请参考官方原文MAX7219 7-Segment Display。 本文参考自官方文档MAX7219 Digit Display 硬件连接 由于与MAX7219Digit的通信是使用SPI进行此集成的,因此您需要在配置中使用…

git国内下载

https://npm.taobao.org/mirrors/git-for-windows/点进去最新的最后一条 选择.exe文件点击

微信小程序之网络数据请求 wx:request的简单使用

网络数据请求 1. 网络数据请求 wx:request2. 请求格式3. 关闭request的合法检验 1. 网络数据请求 wx:request 出于安全性方面的考虑,小程序官方对数据接口的请求做出了两个限制:只能请求 HTTPS 类型的接口必须将接口的域名添加到信任列表中. 在自己的微…

数据备份与还原,(mysqldump,source)索引(index),创建视图(view)

一、备份与还原 /***************************样例表***************************/ CREATE DATABASE booksDB; use booksDB;CREATE TABLE books (bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL ); INSERT INTO books VALUES (11078…

【NLP】BERT和原理揭示

一、说明 BERT(来自transformer的双向编码器表示)是Google AI Language研究人员最近发表的一篇论文。它通过在各种NLP任务中展示最先进的结果,在机器学习社区引起了轰动,包括问答(SQuAD v1.1),自…

免费的云数据库:探索PlanetScale,划分分支的MySQL Serverless平台

最近我发现了一个非常有趣的国外MySQL Serverless平台,它叫做PlanetScale。这个平台不仅仅是一个数据库,它能像代码一样轻松地创建开发和测试环境。你可以从主库中拉出一个与之完全相同结构的development或staging数据库,并在这个环境中进行开…

机器学习实践(2.1)LightGBM分类任务

前言 LightGBM也属于Boosting集成学习模型(还有前面文章的XGBoost),LightGBM和XGBoost同为机器学习的集大成者。相比越来越流行的深度神经网络,LightGBM和XGBoost能更好的处理表格数据,并具有更强的可解释性,还具有易于调参、输入…

SIP协议学习(2)

文章目录 注册(REGISTER)1、AOR和Contact区别2、注册概述3、注册与定位服务4、注册超时处理5、注册消息6、多Contact地址处理7、下期预告 注册(REGISTER) 1、AOR和Contact区别 在学习注册之前,首先区分一下AOR和Cont…

《数学模型(第五版)》学习笔记(1) 第1章 建立数学模型 第2章 初等模型

参考数学建模论坛《数学模型(第三版)》学习笔记 http://www.madio.net/thread-146480-1-1.html 参考视频 数模视频(姜启源、谢金星) https://www.bilibili.com/video/BV1VJ411w7r3/?spm_id_from333.788.recommend_more_video.0&vd_source3ef6540f84…