c 自定义实现string类 clear_「C++」 string类的实现

string 类的实现是一个经常考的面试题,主要考察运算符的重载以及内存管理,还有可以考察面试者的代码风格。这是我自己实现的一个简单的 string 类,有需要的可以参考。代码如下:

e763470c8fa445758beadc4652fdda69

1、mystring.h

// 自定义 MyString 类#define _CRT_SECURE_NO_WARNINGS#pragma once#include using namespace std;class MyString{public:    MyString(const char* c_str = NULL);    ~MyString() { delete[] m_data; this->m_data = NULL; };    // 拷贝构造函数    MyString(const MyString& str);    // 拷贝复制函数    MyString& operator=(const MyString& str);    // <>    friend ostream& operator<>(istream& in, MyString& str);    // +    MyString operator+(const MyString& str);    // ==    bool operator==(const MyString& str);    // []    char operator[](int n);    // 字符串长度    int length() const { return strlen(this->m_data); }    // 获取 C 风格字符串    char* get_c_str() const { return this->m_data; }private:    char* m_data;};

2、mystring.cpp

 #include "mystring.h"MyString::MyString(const char * c_str):m_data(NULL){    if (c_str){        m_data = new char[strlen(c_str) + 1];        strcpy(this->m_data, c_str);}    else{        m_data = new char[1];        *m_data = '/0';}}MyString::MyString(const MyString & str){    m_data = new char[strlen(str.m_data) + 1];    strcpy(this->m_data, str.m_data);}MyString & MyString::operator=(const MyString & str){    if (this == &str){        return *this;}    delete[] m_data;    m_data = new char[strlen(str.m_data) + 1];    strcpy(this->m_data, str.m_data);    return *this;}MyString MyString::operator+(const MyString & str){    MyString* new_string = new MyString;    if (str.m_data == NULL){        *new_string = *this;}    else if (this->m_data == NULL){        *new_string = str;}    else{        new_string->m_data = new char[strlen(this->m_data) + strlen(str.m_data) + 1];        strcpy(new_string->m_data, this->m_data);        strcat(new_string->m_data, str.m_data);}    return *new_string;    delete new_string;}bool MyString::operator==(const MyString & str){    if (this->length() != str.length())        return false;    return strcmp(this->m_data, str.m_data) ? false : true;}char MyString::operator[](int n){    if (n < 0 || n >= this->length()){        cout << "argument error!" << endl;        return NULL;}    else{        return this->m_data[n];}}ostream& operator<>(istream& in, MyString& str){    char tmp[255] = { 0 };    in >> tmp;    str.m_data = new char[strlen(tmp) + 1];    strcpy(str.m_data, tmp);    return in;}

3、测试函数

// 2. 字符串类测试函数void mystring_test(){    MyString str1("hello");    MyString str2(str1);    MyString str3 = ", world";    MyString str4 = str1 + str3;    cout << "str1: " << str1 << ", " << "str2: " << str2 << endl;    cout << str2.length() << endl;    cout << str2.get_c_str() << endl;    cout << "str3: " << str3 << endl;    cout << "str4: " << str4 << endl;    cout << str4[1] << endl;}

运行结果:

str1: hello, str2: hello5hellostr3: , worldstr4: hello, worlde请按任意键继续. . .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值