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<string.h>
#include<stdio.h>
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;
}