定义一个基类BaseString,实现基本的输入字符串的功能。再分别定义三个派生类,要求如下:
1.定义一个ReString类,公有继承基类BaseString,实现字符串的倒置功能。如,将字符串“1234abcd”,倒置后这“dcba4321”。
2.定义一个CopyString类,公有继承基类BaseString,实现字符串的复制功能。
3.定义一个CmpString类,私有继承基类BaseString,实现字符串的比较功能。
基类BaseString部分定义如下:
class BaseString {
char *Chstr;
int Length;
public:
BaseString(char *s);
…
};
测试用例说明:
1.输入第一行是ReString类数据,用于数据倒置;
2.输入第二行是CopyString类数据,用于数据复制;
3.输入第三、四行是CmpString类数据,用于两个字符串比较,输出比较结果。
测试用例1
12345 55↵
Look↵
Book↵
Book↵
倒序输出:55 54321↵
复制输出:Look↵
判断结果:两字符串相等。
#include <iostream>
#include <cstring>
using namespace std;
class BaseString {
public:
BaseString(){}
BaseString(char *s)
:Chstr(s)
{
Length = strlen(Chstr);
}
char * CH(void)const { return Chstr; }
int Len(void)const { return Length; }
private:
char *Chstr;
int Length;
};
class ReString:public BaseString {
public:
ReString(char *s)
:BaseString(s)
{}
void Re(void) {
cout << "倒序输出:";
for (char *p = CH() + Len() - 1; p >= CH(); p--) {
cout << *p;
}
cout << endl;
}
};
class CopyString :public BaseString {
public:
CopyString(char *s)
:BaseString(s)
{}
void Copy(void) {
cout << "复制输出:" << CH() << endl;
}
};
class CmpString :private BaseString {
public:
CmpString(char *s1, char *s2)
:Chstr1(s1),Chstr2(s2)
{}
void Cmp(void) {
char *p = Chstr1;
char *q = Chstr2;
while (*p != '\0' && *q != '\0' && *q == *p) {
p++;
q++;
}
if (*p ==*q) {
cout << "判断结果:两字符串相等。" << endl;
}
else {
cout << "判断结果:两字符串不相等。" << endl;
}
}
private:
char *Chstr1;
char *Chstr2;
};
int main() {
char *c1=new char[80];
char *c2=new char[80];
char *c3 = new char[80];
char *c4 = new char[80];
cin.getline(c3, 80);
ReString r(c3);
cin.getline(c4, 80);
CopyString co(c4);
cin.getline(c1, 80);
cin.getline(c2, 80);
CmpString cm(c1, c2);
r.Re();
co.Copy();
cm.Cmp();
delete[] c1;
delete[] c2;
delete[] c3;
delete[] c4;
return 0;
}