c++程序设计定义一个MyString类,实现两个字符串连接。要求定义类的数据成员为字符指针,实现深拷贝函数。

发布时间:2023年12月18日

定义一个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;
}

文章来源:https://blog.csdn.net/toptopniba/article/details/135051128
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。