定义一个MyString类,实现两个字符串连接。要求定义类的数据成员为字符指针,实现深拷贝函数。
要求:不能使用<string>,可以使用<cstring>中的 strcpy 、strcat、strcmp以及strlen( )等函数
已知测试函数如下:
int main()
{
????MyString str1("Hello");
????MyString str2(" World!");
????MyString str3(str1);
????MyString str4;
????str1.display();
????str2.display();
????str3.display();
????cout<<endl;
????str1.MyStrcat(str2);
????str2.MyStrcat(str1);
????str4.MyStrcat(str1);
????str4.MyStrcat(str2);
????str1.display();
????str2.display();
????str3.display();
????str4.display();
????cout<<endl;
????return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;
class MyString
{
public:
MyString(const char* ch = NULL);
MyString(const MyString& S);
void MyStrcat(MyString& S);
~MyString();
void display();
private:
char* str;
};
MyString::MyString(const char* ch)
{
if (ch == NULL) {
str = new char[1];
*str = '\0';
}
else
{
str = new char[strlen(ch) + 1];
strcpy(str, ch);
}
}
MyString::MyString(const MyString& S) :str(new char[strlen(S.str)])
{
strcpy(str, S.str);
}
MyString::~MyString()
{
if (str)delete[] str;
}
void MyString::MyStrcat(MyString& S)
{
strcat(str, S.str);
}
void MyString::display()
{
int len = strlen(str);
for (int i = 0; i < len; i++)
{
cout << str[i];
}
cout << endl;
}
int main()
{
MyString str1("Hello");
MyString str2(" World!");
MyString str3(str1);
MyString str4;
str1.display();
str2.display();
str3.display();
cout << endl;
str1.MyStrcat(str2);
str2.MyStrcat(str1);
str4.MyStrcat(str1);
str4.MyStrcat(str2);
str1.display();
str2.display();
str3.display();
str4.display();
cout << endl;
return 0;
}