- #include <iostream>
- #include <string.h>
- using namespace std;
- class Picstring
- {
- friend Picstring operator+(const Picstring &s1,const Picstring &s2);
- friend istream& operator>>(istream &in,Picstring &s);
- friend ostream& operator<<(ostream &os,const Picstring &s);
- public:
- int n;//它的长度
- char *p;
- Picstring();
- Picstring(const Picstring &a);
- ~Picstring();
- void operator=(const Picstring &a);
- void operator+=(const Picstring &a);
- int operator>(const Picstring &a);
- int operator>=(const Picstring &a);
- int operator<(const Picstring &a);
- int operator<=(const Picstring &a);
- int operator==(const Picstring &a);
- int operator!=(const Picstring &a);
- char &operator[](int x);
- Picstring operator()(int x,int y);
- };
- Picstring::Picstring()
- {
- p=new char[2];
- }
- Picstring::Picstring(const Picstring &a)
- {
- //把a 复制到p的空间里面。
- //新的空间为a 那么大。
- if(p==a.p){return;}
- p=new char[a.n+2];
- strcpy(p,a.p);
- }
- Picstring::~Picstring()
- {
- delete []p;
- }
- istream& operator>>(istream &in,Picstring &s)
- {
- char words[1000];
- in>>words;
- s.n=strlen(words);
- s.p=new char[s.n+2];
- strcpy(s.p,words);
- return in;
- }
- ostream& operator<<(ostream &os,const Picstring &s)
- {
- cout<<s.p;
- return os;
- }
- Picstring operator+(const Picstring &s1,const Picstring &s2)
- {
- //s1.n+s2.n
- Picstring temp;
- temp.n=s1.n+s2.n;
- temp.p=new char [temp.n+2];
- strcpy(temp.p,s1.p);
- strcpy(&temp.p[s1.n],s2.p);
- return temp;
- }
- void Picstring::operator=(const Picstring &a)
- {
- //把a 复制到p的空间里面。
- //新的空间为a 那么大。
- if(p==a.p){return;}
- delete []p;
- p=new char[a.n+2];
- strcpy(p,a.p);
- }
- void Picstring::operator+=(const Picstring &a)
- {
- //把a 复制到p的空间里面。
- //新的空间为a 那么大。
- *this=*this+a;
- }
- int Picstring::operator>(const Picstring &a)
- {
- //把a 复制到p的空间里面。
- //新的空间为a 那么大。
- if(strcmp(p,a.p)==-1)return 1;
- else return 0;
- }
- int Picstring::operator>=(const Picstring &a)
- {
- //把a 复制到p的空间里面。
- //新的空间为a 那么大。
- if(strcmp(p,a.p)<=0)return 1;
- else return 0;
- }
- int Picstring::operator<(const Picstring &a)
- {
- //把a 复制到p的空间里面。
- //新的空间为a 那么大。
- if(strcmp(p,a.p)>0)return 1;
- else return 0;
- }
- int Picstring::operator<=(const Picstring &a)
- {
- //把a 复制到p的空间里面。
- //新的空间为a 那么大。
- if(strcmp(p,a.p)>=0)return 1;
- else return 0;
- }
- int Picstring::operator==(const Picstring &a)
- {
- //把a 复制到p的空间里面。
- //新的空间为a 那么大。
- if(strcmp(p,a.p)==0)return 1;
- else return 0;
- }
- int Picstring::operator!=(const Picstring &a)
- {
- //把a 复制到p的空间里面。
- //新的空间为a 那么大。
- if(strcmp(p,a.p)!=0)return 1;
- else return 0;
- }
- char &Picstring::operator[](int x)
- {
- if(x<n){return p[x];}
- else {cout<<"out of range"<<endl;}
- }
- Picstring Picstring::operator()(int x,int y)
- {
- //range ="1,2"
- if(x<y&&y<n&&x>=0)
- {
- Picstring tmp;
- delete []tmp.p;
- tmp.p=new char[y-x+3];
- tmp.n=y-x;
- strncpy(tmp.p,p+x,y-x+1);
- return tmp;
- }
- else {cout<<"out of range"<<endl;}
- }
- int main()
- {
- Picstring s2,s1,*p;
- cin>>s1;
- }
- //该片段来自于http://www.codesnippet.cn/detail/2910201410817.html
来源: http://www.codesnippet.cn/detail/2910201410817.html