My_String完善

#include "my_string_ok.h"

My_string_Ok::My_string_Ok():size(20)

{

len = 0;

ptr = new char[size];

ptr[len] = '\0';

}

My_string_Ok::My_string_Ok(int num,char c)

{

cout<<"有参构造"<<endl;

ptr = new char [20] ;

len = 0;

for(int i=0; i<num; i++)

{

// cout<<"i ="<<i<<endl;

*(ptr+i) = c;

len++;

}

*(ptr+num)='\0';

// cout<<data()<<endl;

// cout<<len<<endl;

}

My_string_Ok::My_string_Ok(const char* arr)

{

cout<<"有参构造"<<endl;

if(if_empty(strlen(arr)))

{

len = 0;

ptr = new char[20];

ptr[len] = '\0';

return ;

}

/*if(strlen(arr)>size)

{

cout<<"输入数据过大"<<endl;

return;

}*/

ptr = new char [20];

strcpy(ptr,arr);

len = strlen(arr);

//cout<<data()<<endl;

}

My_string_Ok::My_string_Ok(const My_string_Ok & other)

{

cout<<"拷贝构造函数"<<endl;

this->ptr = new char[20];

strcpy(this->ptr,other.ptr);

this->len = other.len;

// cout<<data()<<endl;

}

My_string_Ok&My_string_Ok ::operator=(const My_string_Ok &other)

{

cout<<"拷贝赋值函数"<<endl;

if(this == &other)

{

return *this;

}

if(!if_empty(other.len))

{

delete ptr;

}

ptr = new char[20];

strcpy(ptr,other.ptr);

len = other.len;

// cout<<data()<<endl;

return *this;

}

My_string_Ok&My_string_Ok ::operator=(const char* arr)

{

cout<<"拷贝赋值函数2"<<endl;

delete ptr;

ptr = new char[20];

strcpy(ptr,arr);

len = strlen(arr);

// cout<<data()<<endl;

return *this;

}

My_string_Ok&My_string_Ok :: operator+(const char c)

{

cout<<"+函数"<<endl;

// My_string_Ok s1;

// ptr = new char[20];

//s1.len = this->len;

*(this->ptr+this->len) = c;

this->len++;

*(this->ptr + len) = '\0';

// strcpy(s1.ptr,this->ptr);

return *this;

}

char My_string_Ok :: operator[](int num)

{

return ptr[num];

}

bool My_string_Ok :: operator>(const My_string_Ok &other)

{

int i =0 ;

while(1)

{

if(this->ptr[i] == other.ptr[i] && this->ptr[i]!='\0' && other.ptr[i]!='\0')

{

i++;

}

else

break;

}

if(this->ptr[i]>other.ptr[i])

return 1;

else

return 0;

}

bool My_string_Ok :: operator<(const My_string_Ok &other)

{

int i =0 ;

while(1)

{

if(this->ptr[i] == other.ptr[i] && this->ptr[i]!='\0' && other.ptr[i]!='\0')

{

i++;

}

else

break;

}

if(this->ptr[i]<other.ptr[i])

return 1;

else

return 0;

}

bool My_string_Ok :: operator == (const My_string_Ok &other)

{

int i =0 ;

while(1)

{

if(this->ptr[i] == other.ptr[i] && this->ptr[i]!='\0' && other.ptr[i]!='\0')

{

i++;

}

else

break;

}

if(this->ptr[i] == other.ptr[i])

return 1;

else

return 0;

}

bool My_string_Ok :: operator >= (const My_string_Ok &other)

{

int i =0 ;

while(1)

{

if(this->ptr[i] == other.ptr[i] && this->ptr[i]!='\0' && other.ptr[i]!='\0')

{

i++;

}

else

break;

}

if(this->ptr[i] >= other.ptr[i])

return 1;

else

return 0;

}

bool My_string_Ok :: operator <= (const My_string_Ok &other)

{

int i =0 ;

while(1)

{

if(this->ptr[i] == other.ptr[i] && this->ptr[i]!='\0' && other.ptr[i]!='\0')

{

i++;

}

else

break;

}

if(this->ptr[i] <= other.ptr[i])

return 1;

else

return 0;

}

bool My_string_Ok :: operator != (const My_string_Ok &other)

{

int i =0 ;

while(1)

{

if(this->ptr[i] == other.ptr[i] && this->ptr[i]!='\0' && other.ptr[i]!='\0')

{

i++;

}

else

break;

}

if(this->ptr[i] != other.ptr[i])

return 1;

else

return 0;

}

My_string_Ok&My_string_Ok :: operator+=(const char *arr)

{

len = len + strlen(arr);

if(len>size)

{

cout<<"超出堆区"<<endl;

len = len - strlen(arr);

}

else

{

ptr = strcat(ptr,arr);;

}

return *this;

}

My_string_Ok&My_string_Ok :: operator+=(const char c)

{

if(len+1>size)

cout<<"超出堆区"<<endl;

else

{

*(ptr+len)=c;

len+=1;

*(ptr+len)='\0';

}

return *this;

}

My_string_Ok::~My_string_Ok()

{

delete ptr;

/* len = 0;

ptr = NULL;*/

}

char *My_string_Ok::data()

{

return ptr;

}

bool My_string_Ok::if_empty(int num)

{

return num==0;

}

void My_string_Ok :: show()

{

cout<<data()<<endl;

}

int My_string_Ok :: get_len()

{

int i=0;

while(1)

{

if(ptr[i]!='\0')

i++;

else

break;

}

return i;

}

std::ostream & operator<<(ostream & out,const My_string_Ok &other)

{

out<<"该内容是:"<<other.ptr<<endl;

return out;

}

std::istream & operator>>(istream &in,My_string_Ok &other)

{

delete other.ptr;

other.ptr = new char [20];

in.getline(other.ptr,20);

//other.len = strlen(other.len);

return in;

}

mian()

#include "my_string_ok.h"

int main()

{

My_string_Ok s1(3,'b');

s1.show();

My_string_Ok s2("abcdefg");

s2.show();

My_string_Ok s3 (s1);

s3.show();

My_string_Ok s4;

s4 = s2;

s4.show();

My_string_Ok s5;

s5 = "ABCDEF";

s5.show();

s5+'G';

s5.show();

cout<<s5.data()[6]<<endl;

cout<<s5.get_len()<<"**"<<s1.get_len()<<endl;

if(s5>s1)

cout<<"s5>s1"<<endl;

else

cout<<"s5<s1"<<endl;

if(s1<s2)

cout<<"s2>s1"<<endl;

else

cout<<"s2<s1"<<endl;

My_string_Ok s6;

s6 = s2;

if(s6 == s2)

{

cout<<"s6=s2"<<endl;

}

else

{

cout<<"s6!=s2"<<endl;

}

cout<<s5.get_len()<<endl;

s6 += "123456";

s6.show();

s6 += 'X';

s6.show();

cout<<s1;

My_string_Ok s7;

cout<<"请输入值"<<endl;

cin>>s7;

cout<<s7;

cout<<s7.get_len()<<endl;

//cout << "Hello World!" << endl;

return 0;

}

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

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

相关文章

深度学习技术在超材料科学中的应用与实操

人工智能算法赋能材料设计与应用专题培训 前沿背景 人工智能与材料科学的融合趋势&#xff1a;在材料科学领域&#xff0c;人工智能&#xff08;AI&#xff09;的引入正在引发一场革命。传统的材料设计和优化依赖于经验和试错方法&#xff0c;这不仅耗时且成本高昂。关于AI赋…

安科瑞Acrel-1000DP分布式光伏监控系统在鄂尔多斯市鄂托克旗巴音乌苏六保煤矿5MW分布式光伏项目中的应用

安科瑞 华楠 摘 要&#xff1a;分布式光伏发电就是将太阳能光伏板分散布置在各个区域&#xff0c;通过小规模、模块化的方式实现电能的并网或独立使用&#xff0c;这种发电方式具有就近发电、就近并网、就近转换、就近使用的特点。近年来&#xff0c;技术进步和政策支持推动了光…

Python批量合并365个工作表的2种方法

一、引言 小明刚进入到新公司&#xff0c;就被委以重任&#xff1a;将365个Excel文件中的英文表头修改为中文。传统方法是逐一打开每个文件&#xff0c;手动修改标题&#xff0c;然后保存&#xff0c;最后再合并。这种方法不仅耗时耗力&#xff0c;还容易出错。如果用Python就…

下水道内缺陷识别检测数据集 yolo数据集 共2300张

下水道内缺陷识别检测数据集 yolo数据集 共2300张 下水道内部缺陷识别数据集&#xff08;Sewer Interior Defect Recognition Dataset, SIDRD&#xff09; 摘要 SIDRD 是一个专门针对下水道内部缺陷识别的数据集&#xff0c;旨在为城市基础设施维护和管理提供一个标准化的训练…

Qt:关于16进制数转化那些事

前言 由于当时做UDP通信的时候使用16进制数与QString的相互转换&#xff0c;但是当时我所要求的转换不仅仅是转化过去就行了&#xff0c;我还有字节数要求&#xff0c;就是这个16进制数占据多少位那么转化后的数据就该占据多大的空间。 正文 1 将 QString 转换为16进制字符串…

【Redis入门到精通五】Java如何像使用MySQL一样使用Redis(jedis安装及使用)

目录 Jedis 1.jedis是什么 2.jedis的安装配置 3.jedis的基础命令操作展示 1.set和get操作&#xff1a; 2.exists和del操作&#xff1a; 3.keys和type操作&#xff1a; 4. expire和ttl&#xff1a; Jedis Java 操作 redis 的客⼾端有很多&#xff0c;其中最知名的是 jedi…

STM32基础学习笔记-Timer定时器面试基础题5

第五章、TIMER 常见问题 1、基本概念&#xff1a;什么是定时器 &#xff1f;作用 &#xff1f;分类 &#xff1f; 2、时基单元 &#xff1f;组成 &#xff1f;计数模式 &#xff1f;溢出条件 &#xff1f; 溢出时间计算 &#xff1f; 3、systick原理 &#xff1f;代码讲解 &…

中国蚁剑(antSword)安装使用

antSword下载 antSword-Loader下载 作者&#xff1a;程序那点事儿 日期&#xff1a;2024/09/12 19:35 中国蚁剑&#xff08;AntSword&#xff09;是一款跨平台的开源网站管理工具&#xff0c;旨在满足渗透测试人员的需求。它是一个功能强大的工具&#xff0c;可以帮助用户管理…

基于CPS CPSQ5453CPSQ5352的易冲车灯方案

一、方案描述 CPS易冲&#xff08;CONVENIENTPOWER&#xff09;针对汽车矩阵大灯&#xff0c;推出 基于CPS CPSQ5453 & CPSQ5352的汽车矩阵式大灯方案。 开发板搭载的主要器件有CPS的独立双通道恒压恒流升压控制器&#xff1a;CPSQ5453、独立双通道LED恒流降压变换器&#…

心觉:如何重塑高效学习的潜意识(1)两种方法的优缺点

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作180/1000天 你的学习习惯是什么呢 学习的时候是感到轻松吗 很多人感觉现在是知识大爆炸的时代&#xff0c;每天都会产生海量的知…

第 1 章:Vue 核心

1. Vue 简介 1.1. 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/&#xff1a;中文官网里面【教程】和【API】是比较重要的。用到api就去查询&#xff0c;实践当中记忆更牢靠。 风格指南&#xff1a;官方推荐写的一个代码风格cookbook&#xff1a;编写v…

【Python报错已解决】SyntaxError: invalid syntax

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25 1. PromSec: Prompt Optimization for Secure Generation of Functional Source Code with Large Language Models (LLMs) M Nazzal, I Khalil, A Khreishah, NH Phan - arXiv preprint arXiv:2409.12699, 2…

车辆识别数据集,图片数量20500,模型已训练200轮

车辆识别数据集&#xff08;Vehicle Recognition Dataset, VDRD&#xff09; 摘要 VDRD 是一个专为车辆识别设计的大规模数据集&#xff0c;它包含了20500张不同类型的汽车、货车、公交车以及其他类型车辆的图像。数据集提供了四种车辆类别&#xff1a;汽车、货车、其他车辆和…

网页爬虫法律与道德:探索法律边界与道德规范

目录 引言 一、网络爬虫技术概述 1.1 定义与功能 1.2 技术原理 1.3 案例分析 二、网络爬虫的法律边界 2.1 合法性要求 2.2 刑事风险 2.3 案例分析 三、网络爬虫的道德规范 3.1 尊重版权和隐私 3.2 合理使用爬虫技术 3.3 透明度和社会责任 四、技术挑战与应对策略…

支付宝沙箱环境 支付

一 什么是沙箱&#xff1a; 沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境 支付宝正式和沙箱环境的区别 &#xff1a; AI&#xff1a; 从沙箱到正式环境&#xff1a; 当应用程序开发完成后&#xff0c;需要将应用程序从沙箱环境迁移到正式环境。 这通常涉及…

RabbitMQ——消息的可靠性处理

1.业务分析 在业务的开发中&#xff0c;我们通常将业务的非核心业务交给MQ来处理&#xff0c;比如支付&#xff0c;在支付过后&#xff0c;我们需要扣减余额&#xff0c;修改支付单状态&#xff0c;修改订单状态&#xff0c;发送短信提醒用户&#xff0c;给用户增加积分等等&am…

C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(2)

2.2、用析构函数释放内存 每当完成动态分配内存时&#xff0c;都应该释放。如果在一个对象中动态分配内存&#xff0c;释放内存的地方就是析构函数。编译器保证当对象被破坏时会调用析构函数。下面就是Spreadsheet类定义中的析构函数&#xff1a; export class Spreadsheet { …

el-form 表单一个 el-form-item 包含多个 el-input 时的校验方法

效果如图&#xff1a; 方法&#xff1a; 在el-form-item上添加required&#xff0c;里面再放一层el-form-item&#xff0c;设置prop&#xff0c;在rules填校验规则 代码实例如下&#xff1a; <template><div><el-form :rules"rules" :model"ru…

关于QSizeGrip在ui界面存在布局的情况下的不显示问题

直接重写resizeEvent你会发现&#xff1a;grip并没有显示 void XXXXX::resizeEvent(QResizeEvent *event) {QWidget::resizeEvent(event);this->m_sizeGrip->move(this->width() - this->m_sizeGrip->width() - 3,this->height() - this->m_sizeGrip->…