自己设计一个字符串类 Mystring

要求:
1、两个Mystring 类型的对象能相加、相减。
2、Mystring 有一个char *类型私有成员指针。
3、数据来源于键盘输入。
例如:
Mystring p = “hello world”
Mystring q = “wo”
p + q ==> hello world wo
p - q ==> hello rld

众所周知,string函数可以实现 字符串的相加或相减,此题要求我们自己用运算符重载的方式来设计一个我们自己的string函数(简称Mystring)。
那么为什么需要运算符重载呢?
函数可以重载,运算符也能重载。
c++中预定义的操作符对象只能是基本数据类型,但实际上对于很多用户自定义的类型(例如类),也需要类似的运算操作,这时就必须在c++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定的类型执行特定的操作。
所以,常规的运算符只能执行int、double、long等基本数据类型,却不能实现字符串的运算,这时就需要重载运算符,此题示例代码如下:

#include
using spacename std;

class Mystring{
public:
Mystring();
~Mystring();
friend istream & operator >> (istream &in, Mystring &a);
friend ostream & operator << (ostream &in, Mystring &a);
friend Mstring & operator + (Mstring &s1, Mystring &s2);
friend char * operator - (Mstring &s1, Mystring &s2);//重载减号运算符,是本题的难点。

private:
char *str;
};
Mystring::Mystring()
{
str = new char[32];
}
Mystring::~Mystring()
{
delete [ ] str;
}
istream & operator >> (istream &in, Mystring &a)
{
in >> a.str;
return in;
}
ostream & operator << (ostream &in, Mystring &a)
{
in << a.str;
return in;
}
Mstring & operator + (Mstring &s1, Mystring &s2)
{
strcat(s1.str, s2.str);
return s1;
}
char * operator - (Mstring &s1, Mystring &s2)
{
char *p = s1.str;
while (*p)
{
if(strncmp(p, s2.str, strlen(s2.str)) == 0)//如果s1.str与s2.str中有相同的字符
{
char *q = p;
while(*q){
*q = *(q + strlen(s2.str));
q++;
}
p -= 2; // 指针向前移两位
}
p++;
}
return si.str;
}
int main(int argc,char *argv[])
{
Mystring a;
Mystring b;

cin >> a >> b;
cout << a + b << endl;
cout << a - b << endl;
}

你可能感兴趣的:(自己设计一个字符串类 Mystring)