完成以下实验任务实在不太行

img


按要求完成图片中的实验,并将代码图片以及运行结果发出,若嫌麻烦可加价。最好是今天晚上之前完成!时间比较紧!

模拟实现string的操作。运行结果:

img

#include <iostream>
using namespace std;

class MyString
{
    //(1)
private:
    char* mPtr; //字符指针
public:
    //(2)对私有变量的读写
    char* getPtr() { return mPtr; }
    void setPtr( char* p) { mPtr = p; } //这里是浅拷贝
    //(3)3个构造函数
    MyString() { mPtr = 0; }
    MyString(const char* p) 
    {
        int len = 0;
        int i = 0;
        while (p[len] != '\0')
        {
            len++;
        }
        mPtr = new char[len + 1];
        while (p[i] != '\0')
        {
            mPtr[i] = p[i];
            i++;
        }
        mPtr[i] = '\0';
    }
    MyString(int n)
    {
        mPtr = new char[n];
    }
    
    //(4)拷贝构造函数
    MyString(MyString& s)
    {
        if (mPtr)
        {
            delete[] mPtr;
        }
        int len = 0;
        int i = 0;
        while (s.mPtr[len] != '\0')
        {
            len++;
        }
        mPtr = new char[len + 1];
        while (s.mPtr[i] != '\0')
        {
            mPtr[i] = s.mPtr[i];
            i++;
        }
        mPtr[i] = '\0';
    }
    //赋值运算符重载
    void operator=(const MyString& s)
    {
        if (mPtr)
        {
            delete[] mPtr;
        }
        int len = 0;
        int i = 0;
        while (s.mPtr[len] != '\0')
        {
            len++;
        }
        mPtr = new char[len + 1];
        while (s.mPtr[i] != '\0')
        {
            mPtr[i] = s.mPtr[i];
            i++;
        }
        mPtr[i] = '\0';
    }
    //(5)析构函数
    ~MyString()
    {
        if (mPtr != 0)
        {
            delete[] mPtr;
            mPtr = 0;
        }
    }
    //(6)求字符串长度
    int length()
    {
        int len=0;
        if (mPtr == 0) return 0;
        while (mPtr[len] != '\0')
            len++;
        return len;
    }
    //(7)字符串拷贝
    void copy(MyString &p)
    {
        if (mPtr != 0)
        {
            delete[] mPtr;
        }
        int len = 0;
        int i = 0;
        while (p.mPtr[len] != '\0')
        {
            len++;
        }
        mPtr = new char[len + 1];
        while (p.mPtr[i] != '\0')
        {
            mPtr[i] = p.mPtr[i];
            i++;
        }
        mPtr[i] = '\0';
    }
    //或者直接拷贝char*
    void copy(const char* p)
    {
        int len = 0;
        int i = 0;
        if (mPtr != 0)
        {
            delete[] mPtr;
        }
        while (p[len] != '\0')
        {
            len++;
        }
        mPtr = new char[len + 1];
        while (p[i] != '\0')
        {
            mPtr[i] = p[i];
            i++;
        }
        mPtr[i] = '\0';
    }
    //(8)字符串查找
    int find(const char* p)
    {
        int i = 0;
        int j = 0;
        if (mPtr == 0)
            return -1;
        for (i = 0; mPtr[i] != '\0'; i++)
        {
            for (j = 0; p[j] != '\0'; j++)
            {
                if (mPtr[i + j] == p[j])
                    continue;
                else
                    break;
            }
            if (p[j] == '\0')
                return i;

        }
        return -1;
    }
    //(9)插入
    char* insert(int pos, const char* p)
    {
        int len = length(); //计算当前串的长度
        int l2 = 0;
        if (pos < 0 || p == 0) return mPtr;
        if (pos >= len) return mPtr; //位置错误

        while (p[l2])
        {
            l2++;
        }

        if (len == 0 || mPtr == 0)
        {
            mPtr = new char[l2 + 1];
            int i = 0;
            while (p[i])
            {
                mPtr[i] = p[i];
                i++;
            }
            mPtr[i] = 0;
            return mPtr;
        }
        
        //
        char* ptmp = new char[len + l2 + 1];
        int k = 0;
        int j = 0;

        //复制pos之前的数据
        for (k = 0; k < pos; k++)
            ptmp[k] = mPtr[k];
        //复制p中的数据
        for (j = 0; p[j] != '\0'; j++)
        {
            ptmp[k] = p[j];
            k++;
        }
        //复制pos之后的数据
        for (j = 0; mPtr[j + pos] != '\0'; j++)
        {
            ptmp[k] = mPtr[j + pos];
            k++;
        }
        ptmp[k] = 0;
        
        //释放原来的空间
        delete[] mPtr;
        mPtr = ptmp;
        ptmp = 0;
        return mPtr;
    }

};

//(10)
int main()
{
    const char* p = "abcde";
    const char* p2 = "1234567890";
    //3种构造方法
    MyString s1;
    MyString s2(p);
    MyString s3(10);

    //拷贝构造函数
    MyString s4(s2);
    //赋值运算符
    MyString s5;
    s5 = s4;

    cout << s5.getPtr() <<"的长度为:" << s5.length() << endl; //输出s5的长度

    //调用拷贝函数
    s5.copy(p2);
    cout << "调用copy函数拷贝1234567890后,s5的内容:" << s5.getPtr() << endl; //输出拷贝后的字符串

    int index = s5.find("00");
    if (index == -1)
        cout << "00不在" << s5.getPtr() << "中" << endl;
    else
        cout << "00在" << s5.getPtr() << "的下标:" << index << endl;

    index = s5.find("234");
    if (index == -1)
        cout << "234不在" << s5.getPtr() << "中" << endl;
    else
        cout << "234在" << s5.getPtr() << "的下标:" << index << endl;

    //插入
    cout << s5.getPtr() << "在下标2处插入xxx后的字符串是:";
    const char* p3 = "xxx";
    cout << s5.insert(2, p3) << endl;

    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632