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;

}

相关推荐
engchina几秒前
Python PDF处理库深度对比:PyMuPDF、pypdfium2、pdfplumber、pdfminer的关系与区别
开发语言·python·pdf
拓端研究室3 分钟前
专题:2025供应链数智化与效率提升报告|附100+份报告PDF、原数据表汇总下载
开发语言·php
矢志航天的阿洪16 分钟前
蒙特卡洛树搜索方法实践
算法
一百天成为python专家25 分钟前
python库之jieba 库
开发语言·人工智能·python·深度学习·机器学习·pycharm·python3.11
Go Dgg1 小时前
【Go + Gin 实现「双 Token」管理员登录】
开发语言·golang·gin
UnderTheTime1 小时前
2025 XYD Summer Camp 7.10 筛法
算法
zstar-_1 小时前
Claude code在Windows上的配置流程
笔记·算法·leetcode
圆头猫爹1 小时前
第34次CCF-CSP认证第4题,货物调度
c++·算法·动态规划
秋说1 小时前
【PTA数据结构 | C语言版】出栈序列的合法性
c语言·数据结构·算法
十五年专注C++开发1 小时前
hiredis: 一个轻量级、高性能的 C 语言 Redis 客户端库
开发语言·数据库·c++·redis·缓存