当前位置:   article > 正文

C++仿照标准字符串类string,设计一个自己的字符串类String_仿照标准字符串类string,设计一个自己的字符串类

仿照标准字符串类string,设计一个自己的字符串类

主要完成以下任务:
1)数据成员是字符指针,可自动适应不同的串长度。
2)串复制,既可使用字符串常量进行复制,也可以使用其他的字符串对象进行复制。
3)串赋值。既可赋值为字符串常量,也可以赋值为使用其他的字符串对象。
4)串连接。重载“+”和“+=”。
5)重载下标运算符[]。
6)串比较。重载“==”和“<”。
7)字符串输入和输出。重载“>>”和“<<”。
程序重点在于运算符重载,以及解决空指针,自赋值问题!
改进,可将字符串长度定义为数据成员,这样就不用每次都用strlen计算长度!若需要定义为数据成员的代码,私我!
程序代码:

#include<iostream>
#include<cstring>
using namespace std;
class String {
private:
    char * Pstr;
public:
    String(const char* p = NULL) {
        if (p == NULL) {
            Pstr = new char[1];
            *Pstr = '\0';
        } else {
            Pstr = new char[strlen(p) + 1];
            strcpy(Pstr, p);
        }
    }

    String(const String& s): Pstr(new char[strlen(s.Pstr) + 1]) {
        strcpy(Pstr, s.Pstr);
    }

    ~String() {
        if (Pstr)
            delete[] Pstr;
    }
    String& operator=(const String& s) {
        if (Pstr == s.Pstr)
            return *this;
        else if (NULL == this) {
            delete Pstr;
            Pstr = new char[strlen(s.Pstr) + 1];
            strcpy(Pstr, s.Pstr);
        } else {
            strcpy(Pstr, s.Pstr);
        }
        return *this;
    }

    friend ostream & operator<<(ostream &out, const String &s) {
        out << s.Pstr;
        return out;
    }

    friend istream & operator >>(istream &in, String &s) {
        in >> s.Pstr;
        if(in)
            return in;
    }

    String operator+(const String &s2) {
        char *p=new char[strlen(Pstr) + strlen(s2.Pstr)+1];
        p=strcat(Pstr,s2.Pstr);
        return String(p);
    }
    void operator+=(const String &s2) {
        strcat(Pstr, s2.Pstr);
    }
    char& operator[](int n) {
        return Pstr[n];

    }
    int Length() {
        int n=strlen(Pstr) ;
        return n;
    }
    bool operator==(const String &s2) {
        return strcmp(Pstr, s2.Pstr) == 0;
    }
    bool operator<(const String &s2) {

        return strcmp(Pstr, s2.Pstr) < 0;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

提供一个main测试函数

int main() {
    String s1("Help"), s2("Good"), s3(s2), s4, s5;
    cout << "s1=" << s1 << endl;
    s3 = "Hello!";
    cout << "s3=" << s3 << endl;
    s3 = s2;
    cout << "s3=" << s3 << endl;
    s3 += s2;
    cout << "s3=" << s3 << endl;
    cin >> s4;
    cout << "s4=" << s4 << endl;
    s5 = s3 + s4;
    cout << "s5=" << s5 << endl;
    s5[0] = 'g';
    cout << "s5=" << s5 << endl;
    cout << "strlen(s5)=" << s5.Length() << endl;
    cout << boolalpha << (s3 == s1) << endl;
    cout << boolalpha << (s3 < s1) << endl;
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

运行截图
在这里插入图片描述
有收获的小可爱记得点关注哦!嘿嘿!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/490426
推荐阅读
相关标签
  

闽ICP备14008679号