使用方法:
1.定义一个字符串
可以Picstring s1="picard";
或者 Picstring s1;
cin>>s1;
2.用+ 可以把两个串起来。
3. +=,<,> ,>=,<=,!=,== 等
4.输出,cout<<s1;
以上。
#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;
}