C++ 学习系列 -- string 实现

string是C++标准库的重要部分,主要用于字符串处理。这里我们自己实现一个简单版本的 string.

一   思路

string 类中应该包含如下:

1. 类成员变量:char* m_data,利用 char* 指针存放字符串

2. 成员函数:

   2.1   size(), 用于返回字符串的长度,不包含字符 '\0'

   2.2  operator[](index) ,返回字符串中任意位置的字符

   2.3  c_str()  ,将 my_string  转为 char*,并返回 

二  具体实现

// my_string.h
class my_string
{
public:
    my_string();
    ~my_string();
    my_string(const char* pstr);
    my_string(const my_string& other);

    my_string& operator=(const my_string& other);

    int size() const;

    char  operator[](int index) const;
    char* c_str() const;

private:
    char* m_data;

};

// my_string.cpp
#include "my_string.h"
#include
#include

my_string::my_string():m_data(new char[1])
{
   *m_data = '\0';
}

my_string::~my_string()
{
    delete [] m_data;
}

my_string::my_string(const char* ptr)
{
    if(!ptr)
    {
        m_data = new char[1];
        *m_data = '\0';
    }
     else
    {
        int nLen = strlen(ptr); // 不包含 字符 '\0'
        m_data = new char[nLen + 1];
        strcpy(m_data, ptr);
    }
}

my_string::my_string(const my_string& other)
{
    int nLen = strlen(other.m_data);
    m_data = new char[nLen + 1];
    strcpy(m_data, other.m_data);
}

my_string&
my_string::operator=(const my_string& other)
{
    int nLen = strlen(other.m_data);
    m_data = new char[nLen+1];
    strcpy(m_data, other.m_data);
    return *this;
}

int my_string::size() const
{
    return strlen(m_data);
}

char my_string::operator[](int index) const
{
    int nLen = strlen(m_data);
    if(index > nLen-1) // 超出字符串范围
    {
        return '\0';
    }
    else
    {
        return m_data[index];
    }
}

char* my_string::c_str() const
{
    return m_data;
}

// main.cpp
void testMyString()
{
    my_string str("abc");

    std::cout << str.size() << std::endl;

    my_string s2 = str;
    std::cout << str.size() << std::endl;
    std::cout << s2.c_str() << std::endl;

}

int main()
{
    testMyString();
    return 0;
}


你可能感兴趣的:(c++,学习,开发语言)