#include<iostream>
using std::ostream;
using std::istream;
using std::cin;
using std::cout;
using std::endl;
class FunnyString//定义FunnyString
{
private:
int size; //表示数组的长度
public:
char s[128]; //存放数组
FunnyString() //初始化
{
for(int i=0;i<128;i++)
s[i]=NULL;
size=0;
}
//重载输出
friend ostream &operator<<(ostream &op, const FunnyString &p1);
//重载输入
friend istream &operator>>(istream &ip, const FunnyString &p2);
//重载+
friend FunnyString operator+(FunnyString &p1, FunnyString &p2);
//重载-
friend FunnyString operator-(FunnyString &p1, FunnyString &p2);
//重载*
friend FunnyString operator*(FunnyString &p1, FunnyString &p2);
//重载+=
friend FunnyString operator+=(FunnyString &p1, FunnyString &p2);
//重载-=
friend FunnyString operator-=(FunnyString &p1, FunnyString &p2);
//重载赋值=
FunnyString &operator=(FunnyString &p1);
//计算数组元素个数
void CountSize()
{
int n=0;
while(s[n]!=NULL)
n++;
size=n;
}
};
ostream &operator<<(ostream &op,const FunnyString &p1)
{
int m=0;
while(p1.s[m]!=NULL)//去除空元素
{
op<<p1.s[m];
m++;
}
return op;
}
istream &operator>>(istream &ip, FunnyString &p2)
{
ip>>p2.s;
return ip;
}
FunnyString operator+(FunnyString &p1,FunnyString &p2)
{
FunnyString p;
int a1=0,b1=0;
p1.CountSize();
p2.CountSize();
while(p1.size>a1&&p2.size>b1)//判定两数组长度都大于0
{
if((p1.s[p1.size-1-a1])==(p2.s[b1]))//去除重复元素 p1的尾部开始,p2头部开始
{
a1++;
b1++;
}
else
break;
}
for(int i=0;i<=p1.size-1-a1;i++)//p1剩余元素放入p
p.s[i]=p1.s[i];
for(i=b1;i<=p2.size-1;i++)//p2剩余元素接着放入p
p.s[i+p1.size-a1-b1]=p2.s[i];
return p;
}
FunnyString operator-(FunnyString &p1, FunnyString &p2)
{
FunnyString p;
int n=0;
bool t=true;
p1.CountSize();
p2.CountSize();
for(int i=0;i<p1.size;i++)
{
for(int j=0;j<p2.size;j++)
if(p1.s[i]==p2.s[j]) t=false;//判断p2中是否有p1元素
if(t)
{
p.s[n]=p1.s[i];//p1的元素不在p2中,就放入p
n++;
}
t=true;
}
p.CountSize();
return p;
}
FunnyString operator*(FunnyString &p1, FunnyString &p2)
{
FunnyString p;
int n=0;
p1.CountSize();
p2.CountSize();
if(p1.size==p2.size)
{
for(int i=0;i<p1.size;i++)//交错放入p
{
p.s[n]=p1.s[i];
p.s[n+1]=p2.s[i];
n+=2;
}
}
else
cout<<"the size of two strings must be equal";
return p;
}
FunnyString &FunnyString::operator=(FunnyString &p1)
{
for(int i=0;i<128;i++)
s[i]=p1.s[i];
return *this;
}
FunnyString operator+=(FunnyString &p1, FunnyString &p2)
{
p1=operator+(p1,p2);
return p1;
}
FunnyString operator-=(FunnyString &p1, FunnyString &p2)
{
p1=operator-(p1,p2);
return p1;
}
void read(FunnyString &a,FunnyString &b)//读入函数
{
cout<<"Please input s1: ";
cin>>a;
cout<<"Please input s2: ";
cin>>b;
cout<<endl;
}
int main()
{
FunnyString s1,s2,a;
read(s1,s2);
cout<<"S1+S2 is "<<s1+s2<<endl;
cout<<"S1-S2 is "<<s1-s2<<endl;
a=s1;//为了不改变s1的元素,下面还要用
a+=s2;
cout<<"S1+=S2 is "<<a<<endl;
a=s1;//为了不改变s1的元素,下面还要用
a-=s2;
cout<<"S1-=S2 is "<<a<<endl;
cout<<"S1*S2 is "<<s1*s2<<endl;
return 0;
}