mystring类
2019-12-09 本文已影响0人
1墨家巨子
#include<iostream>
#include<cstring>
using namespace std;
class MyString{
public:
MyString();
MyString(const char *p);
MyString(const MyString& obj);
~MyString();
MyString & operator=(const char*p);
//MyString & operator=(const MyString& obj);
bool operator==(const MyString& obj);
bool operator!=(const MyString& obj);
int operator < (const MyString& obj);
int operator > (const MyString& obj);
friend ostream & operator << (ostream &,const MyString& obj);
friend istream & operator >> (istream &,const MyString& obj);
char operator[](int index);
char at(int index);
char *begin();
char *end();
bool insert(int index,const char *p); //指定位置插入字符串
bool append(const char *p); //追加字符串
//private:
int length;
int max_size;
char *arr;
};
MyString::MyString(){
max_size=5;
length=0;
arr = new char[max_size];
strcpy(arr,"\0");
cout<<"无参构造"<<endl;
}
MyString::MyString(const char *p){
length=strlen(p);
max_size=length;
arr = new char[max_size];
strcpy(arr,p);
cout<<"有参构造"<<endl;
}
MyString::MyString(const MyString& obj){
length=strlen(obj.arr);
max_size=length;
arr = new char[max_size];
strcpy(arr,obj.arr);
cout<<"拷贝"<<endl;
}
MyString::~MyString(){
delete []arr;
arr=NULL;
cout<<"free"<<endl;
}
MyString & MyString::operator=(const char*p){
//if( max_size > strlen(p) ) return *this;
length=strlen(p);
strcpy(arr,p);
cout<<"字符赋值"<<endl;
return *this;
}
/*MyString & MyString::operator=(const MyString& obj){
length=strlen(obj.arr);
strcpy(arr,obj.arr);
cout<<"对象赋值"<<endl;
return *this;
}*/
bool MyString::operator!=(const MyString& obj){
int ret=strcmp(arr,obj.arr);
if(ret != 0) return true;
else return false;
}
bool MyString::operator==(const MyString& obj){
int ret=strcmp(arr,obj.arr);
if(ret == 0) return true;
else return false;
}
int MyString::operator < (const MyString& obj){
int ret=strcmp(arr,obj.arr);
if(ret < 0) return -1;
else return 0;
}
int MyString::operator > (const MyString& obj){
int ret=strcmp(arr,obj.arr);
if(ret > 0) return 1;
else return 0;
}
ostream & operator << (ostream & out,const MyString& obj){
out<<obj.arr;
return out;
}
istream & operator >> (istream & in,const MyString& obj){
in>>obj.arr;
return in;
}
char MyString::operator[](int index){
if(index >= length) return -1;
return arr[index];
}
char MyString::at(int index){
if(index >= length) return -1;
return arr[index];
}
char * MyString::begin(){
return arr;
}
char * MyString::end(){
if(length==0) return -1;
return arr[length-1];
}
bool MyString::insert(int index,const char *p){
//写不动了
}
bool MyString::append(const char *p){
strcat(arr,p);
}
int main(){
MyString str;
cout<<str.length<<' '<<str.arr<<endl;
MyString str1("hello word");
cout<<str1.length<<' '<<str1.arr<<endl;
MyString str2(str1);
cout<<str2.length<<' '<<str2.arr<<endl;
MyString str3=str1;
cout<<str3.length<<' '<<str3.arr<<endl;
MyString str4=str="hello";
cout<<str4.length<<' '<<str4.arr<<' '<<str4.max_size<<endl;
cout<<str.length<<' '<<str.arr<<' '<<str.max_size<<endl;
str4=str1;
cout<<str4.length<<' '<<str4.arr<<' '<<str4.max_size<<endl;
cout<<"str!=str2 " << (str!=str2) <<endl;
cout<<"str1==str2 "<< (str1==str2) <<endl;
cout<<"str < str1 "<< (str<str1) <<endl;
cout<<"str1 > str "<< (str1>str) <<endl;
cout<<str<<endl;
cout<<str[4]<<endl;
return 0;
}