Mystring.h
#ifndef _MYSTRING_H_
#define _MYSTRING_H_
#include<iostream>
using namespace std;
class Mystring
{
private:
int m_length;
char *String;
public:
Mystring();
Mystring(char *s);
Mystring(const Mystring &s);
Mystring(int a,char ch);
friend ostream &operator <<(ostream &out,const Mystring &s);
friend istream &operator >>(istream &in,Mystring &s);
char operator [](int index);
Mystring operator = (const Mystring &s);
Mystring operator = (char *s);
Mystring operator + (const Mystring &s);
Mystring operator +(char *s);
Mystring operator += (const Mystring &s);
Mystring operator +=(char *s);
bool operator ==(const Mystring &s);
bool operator ==(char *s);
bool operator !=(const Mystring &s);
bool operator !=(char *s);
bool operator >(const Mystring &s);
bool operator >(char *s);
bool operator <(const Mystring &s);
bool operator <(char *s);
bool operator >=(const Mystring &s);
bool operator >=(char *s);
bool operator <=(const Mystring &s);
bool operator <=(char *s);
~Mystring();
};
#endif
Mystring.cpp
#include<iostream>
#include<cstring>
using namespace std;
#include"Mystring.h"
Mystring::Mystring()
{
m_length=0;
String=NULL;
}
Mystring::Mystring(char *s)
{
m_length=strlen(s);
String=new char [m_length+1];
strcpy(String,s);
}
Mystring::Mystring(int a,char ch)
{
m_length=a;
int i=0;
String=new char [m_length+1];
for(i=0;i<a;i++)
{
String[i]=ch;
}
String[m_length]='\0';
}
Mystring::Mystring(const Mystring &s)
{
m_length=s.m_length;
String=new char [m_length+1];
strcpy(String,s.String);
}
ostream &operator <<(ostream &out,const Mystring &s)
{
out<<s.String;
return out;
}
istream &operator >>(istream &in,Mystring &s)
{
char temp[100]={'\0' };
in>>temp;
s.m_length=strlen(temp);
s.String=new char[s.m_length+1];
strcpy(s.String,temp);
return in;
}
Mystring Mystring::operator = (const Mystring &s)
{
if(String!=NULL)
{
delete String;
String=NULL;
}
m_length=s.m_length;
String=new char [m_length+1];
strcpy(String,s.String);
return *this;
}
Mystring Mystring::operator = (char *s)
{
if(String!=NULL)
{
delete String;
String=NULL;
}
m_length=strlen(s);
String=new char [m_length+1];
strcpy(String,s);
return *this;
}
char Mystring:: operator [](int index)
{
return String[index];
}
Mystring Mystring::operator +(const Mystring &s)
{
Mystring temp;
temp.m_length=m_length+s.m_length;
temp.String=new char[temp.m_length+1];
strcpy(temp.String,String);
strcat(temp.String,s.String);
temp.String[temp.m_length]='\0';
return temp;
}
Mystring Mystring::operator +(char *s)
{
Mystring temp;
temp.m_length=m_length+strlen(s);
temp.String=new char[temp.m_length+1];
strcpy(temp.String,String);
strcat(temp.String,s);
temp.String[temp.m_length]='\0';
return temp;
}
Mystring Mystring::operator +=(const Mystring &s)
{
char*temp=String;
m_length=m_length+s.m_length;
String=new char[m_length+1];
strcpy(String,temp);
strcat(String,s.String);
String[m_length]='\0';
delete temp;
return *this;
}
Mystring Mystring::operator +=(char *s)
{
char *temp=String;
m_length=m_length+strlen(s);
String=new char[m_length+1];
strcpy(String,temp);
strcat(String,s);
String[m_length]='\0';
delete temp;
return *this;
}
bool Mystring::operator == (const Mystring &s)
{
if(strcmp(String,s.String)==0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator == (char *s)
{
if(strcmp(String,s)==0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator != (const Mystring &s)
{
if(strcmp(String,s.String)!=0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator != (char *s)
{
if(strcmp(String,s)!=0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator > (const Mystring &s)
{
if(strcmp(String,s.String)>0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator > (char *s)
{
if(strcmp(String,s)>0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator < (const Mystring &s)
{
if(strcmp(String,s.String)<0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator < (char* s)
{
if(strcmp(String,s)<0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator >= (const Mystring &s)
{
if(strcmp(String,s.String)>=0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator >= (char *s)
{
if(strcmp(String,s)>=0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator <= (const Mystring &s)
{
if(strcmp(String,s.String)<=0)
{
return true;
}
else
{
return false;
}
}
bool Mystring::operator <= (char *s)
{
if(strcmp(String,s)<=0)
{
return true;
}
else
{
return false;
}
}
Mystring::~Mystring()
{
if(String!=NULL)
{
delete String;
}
String=NULL;
m_length=0;
}
main.cpp
#include<iostream>
#include"Mystring.h"
int main()
{
Mystring s1("xiaoshengbucai");
Mystring s2("weideguniangqinlai");
Mystring s3(10,'d');
Mystring s4("gaoci");
Mystring s5=s2;
if(s4=="gaoci")
{
cout<<"lalala"<<endl;
}
else
{
cout<<"lululu"<<endl;
}
cout<<s1<<endl;
cout<<s2<<endl;
cout<<s3<<endl;
cout<<s4<<endl;
return 0;
}