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;
}
上一篇 下一篇

猜你喜欢

热点阅读