9.23 My_string.cpp

my_string.h
#ifndef MY_STRING_H
#define MY_STRING_H#include <iostream>
#include <cstring>using namespace std;class My_string
{
private:char *ptr; //指向字符数组的指针int size; //字符串的最大容量int len; //字符串当前容量public://无参构造My_string():size(20){cout<<"****************无参构造***********"<<endl;this->ptr = new char[size];this->ptr[0] = '\0'; //表示串为空串this->len = 0;}//有参构造My_string(const char* src){cout<<"****************一个参数有参构造***********"<<endl;this->len = strlen(src);this->size = len + 1;this->ptr = new char[size];strcpy(this->ptr,src);}My_string(int num,char value){cout<<"****************两个参数有参构造***********"<<endl;this->len = num;this->size = len + 1;this->ptr = new char[len+1];int i=0;while(i<num){this->ptr[i]=value;i++;}this->ptr[num]='\0';}//拷贝构造My_string (const My_string &other){cout<<"****************拷贝构造***********"<<endl;len = other.len;size = other.size;ptr = new char[size];strcpy(ptr, other.ptr);}//拷贝赋值My_string &operator=(const My_string &other){cout<<"****************拷贝赋值***********"<<endl;if (this == &other) {return *this; // 直接返回当前对象}delete[] ptr;this->len = other.len;this->size = other.size;this->ptr = new char[size];strcpy(ptr, other.ptr);return *this;}//析构函数~My_string(){cout<<"****************析构函数***********"<<endl;delete []this->ptr;}//显示内容void show();//判空void isempty();//判满void isfull();//尾插void push_back(char value);//尾删void pop_back();//at函数实现char &at(int index);//清空函数void clear();//返回C风格字符串char* data();//返回实际长度int get_length();//返回当前最大容量int get_size();//君子函数:二倍扩容void resize();};#endif // MY_STRING_H
my_string.cpp
#include "my_string.h"
#include <cstring>
void My_string::show(){cout<<ptr<<endl;
}
//判空
void My_string::isempty(){if(this->len==0){cout<<"字符串为空"<<endl;}return;
}
//判满
void My_string::isfull(){if(this->len>=this->size){cout<<"字符串满"<<endl;resize();cout<<"重新分配空间"<<endl;}else{cout<<"字符串未满"<<endl;}return;
}//尾插
void My_string::push_back(char value){this->isfull();this->ptr[len]=value;len++;ptr[len]='\0';
}//尾删
void My_string::pop_back(){this->len=this->len-1;ptr[len]='\0';
}
//at函数实现
char & My_string::at(int index){return ptr[index];
}
//清空函数
void My_string::clear(){ptr[0]='\0';this->len=0;
}//返回C风格字符串
char* My_string::data(){return this->ptr; // 返回指向字符串的指针
}
//返回实际长度
int My_string::get_length(){return this->len;
}
//返回当前最大容量
int My_string::get_size(){return this->size;
}//君子函数:二倍扩容
void My_string::resize() {size *= 2;char* new_ptr = new char[size];strcpy(new_ptr, ptr);delete[] ptr;ptr = new_ptr;}
main.cpp
#include "my_string.h"int main(){My_string p1;My_string p2("hello");p2.show();My_string p3(5,'A');p3.show();My_string p4 = p2;p4.show();p3=p2;p3.show();p2.show();cout<<"p2的第3个字符"<<p2.at(3)<<endl;cout<<"p2C风格的字符串"<<p2.data()<<endl;p2.isfull();cout<<"p2的最大长度:"<<p2.get_size()<<endl;cout<<"p2现在的长度:"<<p2.get_length()<<endl;p2.clear();p2.show();p2.push_back('W');p2.show();p2.pop_back();p2.show();}相关文章:
9.23 My_string.cpp
my_string.h #ifndef MY_STRING_H #define MY_STRING_H#include <iostream> #include <cstring>using namespace std;class My_string { private:char *ptr; //指向字符数组的指针int size; //字符串的最大容量int len; //字符串当前…...
【android10】【binder】【3.向servicemanager注册服务】
系列文章目录 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录 …...
Java — LeetCode 面试经典150题(一)
双指针 125.验证回文串 题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回…...
Python酷玩之旅_mysql-connector
前言 Python作为数据科学、机器学习等领域的必选武器,备受各界人士的喜爱。当你面对不同类型、存储于各类介质的数据时,第一时间是不是要让它亮个相?做个统计,画个图表,搞个报表… 等等。 正如Java中的JdbcDriver一样…...
7.搭建个人金融数据库之快速获取股票列表和基本信息!
前边我们提过,免费的数据一般来自于爬虫,获取难度和维护成本都比较高,其实不太适合小白用户。所以非必要情况下,我们尽量不用这种方式来获取数据。 我自己用的比较多的是tushare,一般来说有它也就够了,大…...
Nginx基础详解1(单体部署与集群部署、负载均衡、正反代理、nginx安装)
本阶段的任务 1.学会集群的操作概念 2.完成对Nginx的入门操作 3.使用Nginx实现集群和负载均衡 4.使用Nginx实现高可用的方案 目录 1.单体部署与集群部署 1.1单体部署的概念 1.2单体部署的优缺点 1.3集群部署的概念 1.4集群部署的优缺点 1.5集群部署需要注意的点 1.…...
等保一体机如何帮你应对网络攻击
等保一体机如何帮你应对网络攻击 在当今信息化时代,网络安全已成为企业和组织面临的重要挑战。随着网络攻击手段的不断升级,传统的安全防护措施已难以应对复杂多变的威胁。等保一体机作为一种集成化的安全防护解决方案,能够有效帮助企业应对…...
CVE-2024-1112 Resource Hacker 缓冲区溢出分析
漏洞简述 CVE-2024-1112 是 Resource Hacker 软件的一个缓冲区溢出漏洞。该漏洞存在于版本 3.6.0.92 中。由于软件在处理命令行中的文件路径时未对文件字符串长度进行限制,过长的字符串参数导致内存被过度写入,从而引发缓冲区溢出。 漏洞复现 构造长度…...
WebGL渲染与创建2D内容
目录 创建画布2D渲染修改顶点着色器光照深度测试混合模式WebGL是一个强大的工具,可以用来在Web浏览器中创建复杂的3D图形。虽然它的设计初衷是为了3D渲染,但也可以用于创建2D内容。通过巧妙地利用几何、投影和纹理,我们可以构建出各种2D图形。 创建画布 首先,我们需要在H…...
ArcGIS Desktop使用入门(三)图层右键工具——拓扑(下篇:地理数据库拓扑)
系列文章目录 ArcGIS Desktop使用入门(一)软件初认识 ArcGIS Desktop使用入门(二)常用工具条——标准工具 ArcGIS Desktop使用入门(二)常用工具条——编辑器 ArcGIS Desktop使用入门(二&#x…...
LeetCode题练习与总结:二叉树的最近公共祖先--236
一、题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也…...
uni-app 多环境配置
前后端分离模式下,不同的环境如开发环境(dev)、测试环境(test)、生产环境(prod)等,不同环境后端数据库、api地址等可能都不同 。 uni-app中只有development和production两个环境 以配…...
【d48】【Java】【力扣】LCR 123. 图书整理 I
思路 方法1:放进list,将list倒置,利用stream,将list改为int类型 方法2:递归:递归通用思路;明确每一层做什么确定返回值确定什么地方接收下层的返回值 每一层:调用下层,然后把自己…...
【MySQL】InnoDB 索引为什么使用B+树而不用跳表?
在MySQL中,为了加速查询,使用B树来构建索引,将查询性能从O(n)优化到O(log n)。虽然跳表同样提供O(log n)的查询效率并且实现相对简单,但B树更适合MySQL的索引使用,原因包括: B树和跳表的区别 B树和跳表的…...
【学习笔记】TLS/SSL握手之Records
TLS / SSL会话是由记录(Records)所组成,有4种records HandshakeAlertChange Cipher SpecApplication DataHandshake和Alert Records被分为子类型(Subtypes): Handshake:Client HelloHandshake&a…...
【MySQL】创建新账号新数据库并授权
在 MySQL 中创建一个名为 new_user 的用户,并设置密码为 new_pass,然后创建一个名为 new_db 的数据库,并将该数据库的所有权限授予 new_user 用户。 登录 MySQL: mysql -u root -p创建用户: CREATE USER new_userlo…...
Nginx反向代理简介,作用及配置;Nginx负载均衡简介,作用及配置;
一,Nginx反向代理 1.1简介 反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的…...
SAP MIGO M7146不支持移动原因
移动类型 Z91 查看配置:Z91 匹配的原因没有921 倒是Z92的原因里面有921 那解决方案有2种,但是要根据具体业务要求来 1、审视一下是否移动原因用错了 ?换一个移动原因 2、确实是这个移动类型 要用到这个移动原因 ,那就在上图 移…...
vue使用PDF.JS踩的坑--部署到服务器上显示pdf.mjs viewer.mjs找不到资源
之前项目使用的pdf.js 是2.15.349版本,最近换了一个4.6.82的版本,在本地上浏览文件运行的好好的,但是发布到服务器(IIS)上打不开文件,控制台提示找不到pdf.mjs viewer.mjs。 之前使用的2.15.349pdf和viewer…...
重型工程车辆数据集
重型工程车辆数据集,内含Bull_dozer(推土机), Dumb_truck(卡车), Excavator(挖掘机), Grader(平地机), Loader(转载机), Mobile_crane(…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
