【问题描述】实现Mystring类

本文档展示了如何实现一个名为Mystring的C++自定义字符串类,包括构造函数、析构函数、拷贝构造函数以及字符串切割、插入和删除等基本操作。在main函数中,对类的方法进行了实例化和调用,如创建字符串对象、切割、删除和插入字符等,并演示了相应输出。
摘要由CSDN通过智能技术生成

【问题描述】实现Mystring类

类结构如下

class Mystring

{

private:

char *str;//字符串指针

unsigned len;//字符串长度

public:

Mystring(const char *val = “”);//构造函数

~Mystring();//析构函数,打印"destructed"+字符串与字符串长度,空格隔开,具体样式参考测试样例

Mystring(Mystring &cstr);//拷贝构造函数

//字符串切割,返回一个新的Mystring,sta为切割起始位置,length为切割长度

Mystring substr(unsigned sta = 0,unsigned length = 1);

unsigned length();//返回字符串长度

char *getStr();//获取字符串

/*实现按指定位置插入指定数量的指定字符,p:待插入位置起始下标,n:待插入字符数量,c:待插入字符

*插入成功时返回true,失败返回false

* */

bool insert(unsigned p = 0,unsigned n = 1,char c = ’ ');

/*实现删除从指定位置开始的指定数量的字符,p:待删除位置起始下标,n:待删除字符数量

*删除成功时返回true,删除失败返回false

*/

bool erase(unsigned p = 0,unsigned n = 1);

};

主函数结构如下:

int main()

{

char s[100];

cin>>s;

Mystring mstr(s);

Mystring submstr(mstr.substr(0,11));

cout<< "submstr: "<<submstr.getStr()<<endl;

submstr.erase(0,5);

cout<<submstr.getStr()<<endl;

submstr.insert(0,5,‘c’);

cout<<"after insert: "<<submstr.getStr()<<endl;

return 0;

}

#请勿修改主函数,请勿使用C++的string类#

【输入形式】字符串

【输出形式】调用所给main函数

【样例输入】

hello,world

【样例输出】

destructed hello,world 11

submstr: hello,world

after erase: ,world

after insert: ccccc,world

destructed ccccc,world 11

destructed hello,world 11

#include<iostream>
#include<string.h>
using namespace std;

class Mystring

{

private:

    char* str;//字符串指针

    unsigned len;//字符串长度

public:

    Mystring(const char* val = "");//构造函数

    ~Mystring();//析构函数,打印"destructed"+字符串与字符串长度,空格隔开,具体样式参考测试样例

    Mystring(const Mystring& cstr);//拷贝构造函数

//字符串切割,返回一个新的Mystring,sta为切割起始位置,length为切割长度

    Mystring substr(unsigned sta = 0, unsigned length = 1);

    unsigned length();//返回字符串长度

    char* getStr();//获取字符串

    /*实现按指定位置插入指定数量的指定字符,p:待插入位置起始下标,n:待插入字符数量,c:待插入字符

    *插入成功时返回true,失败返回false

    * */

    bool insert(unsigned p = 0, unsigned n = 1, char c = ' ');


    /*实现删除从指定位置开始的指定数量的字符,p:待删除位置起始下标,n:待删除字符数量

    *删除成功时返回true,删除失败返回false

    */

    bool erase(unsigned p = 0, unsigned n = 1);

};
Mystring::Mystring(const char* val) {
    len = strlen(val);
    str = new char[100];
    strcpy(str , val);
}

Mystring::~Mystring()
{

    cout << "destructed " << str << " " << len<<endl;
     delete[] str;
}
/* 拷贝构造函数 */
Mystring::Mystring(const Mystring& cstr)
{
    str = new char[100];
    strcpy(str, cstr.str);
    len = cstr.len;
}


Mystring Mystring::substr(unsigned  sta, unsigned  length) {
    char a[100];
    int l = 0;
    memset(a, NULL, sizeof(a));//初始
    for (int i = sta; i < sta + length; i++) {
        a[l++] = str[i];
    }
    Mystring newStr(a);
    Mystring sb(a);
    //cout << "destructed " << a << " " << strlen(a) << endl;
    return newStr;
}

char* Mystring::getStr() {
    return  str;
}


bool Mystring::erase(unsigned int p, unsigned int n) {
    char a[100];
    memset(a, NULL, sizeof(a));//初始 
    int i;
    for (i = 0; i < p; i++) {
        a[i] = str[i];
    }

    int l = i;

    for (i; i < l + n + 1; i++)
    {
        a[i] = str[i + n];
    }
    strcpy(str, a);
    len -= n;
    return true;
};

bool Mystring::insert(unsigned int p, unsigned int n, char c) {
    char a[100];
    memset(a, NULL, sizeof(a));//初始 
    int i;
    for (i = 0; i < p; i++) {
        a[i] = str[i];
    }
    int l = i;
    for (i; i < l + n; i++) {
        a[i] = c;
    }
    for (i; i < len + n; i++) {
        a[i] = str[i - n];
    }
    strcpy(str, a);
    len += n;
    return true;

}
int main()

{

    char s[100];

    cin >> s;

    Mystring mstr(s);

    Mystring submstr(mstr.substr(0,11));



    cout << "submstr:    " << submstr.getStr() << endl;

    submstr.erase(0, 5);

    cout <<"after erase:     " << submstr.getStr() << endl;

    submstr.insert(0, 5, 'c');

    cout << "after insert:     " << submstr.getStr() << endl;

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值