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;

}

相关推荐
StarPrayers.5 分钟前
旅行商问题(TSP)(2)(heuristics.py)(TSP 的两种贪心启发式算法实现)
前端·人工智能·python·算法·pycharm·启发式算法
微露清风8 分钟前
系统性学习C++-第五讲-内存管理
java·c++·学习
qiuiuiu41313 分钟前
正点原子RK3568学习日志-编译第一个驱动程序helloworld
linux·c语言·开发语言·单片机
爱吃橘的橘猫14 分钟前
嵌入式系统与嵌入式 C 语言(2)
c语言·算法·嵌入式
2351617 分钟前
【LeetCode】146. LRU 缓存
java·后端·算法·leetcode·链表·缓存·职场和发展
molong9311 小时前
Kotlin 内联函数、高阶函数、扩展函数
android·开发语言·kotlin
盼哥PyAI实验室1 小时前
踏上编程征程,与 Python 共舞
开发语言·python
阿无,1 小时前
Java设计模式之工厂模式
java·开发语言·设计模式
星夜钢琴手1 小时前
推荐的 Visual Studio 2026 Insider C++ 程序项目属性配置
c++·visual studio
weixin_307779131 小时前
使用Python高效读取ZIP压缩文件中的UTF-8 JSON数据到Pandas和PySpark DataFrame
开发语言·python·算法·自动化·json