#C++ Mystring类的部分实现
#include <iostream>
#include <cstring>
class Mystring
{
public:
//无参构造函数
Mystring()
{
str = nullptr;
len = 0;
}
//有参构造函数
Mystring(const int length, const char ch)
{
str = new char[length + 1];
for(int i = 0; i < length; i++)
str[i] = ch;
str[length] = 0;
len = length;
}
Mystring(const char *str)
{
len = strlen(str);
this->str = new char[len + 1];
strncpy(this->str, str, len);
}
Mystring(const char *str, const unsigned int &length)
{
len = length;
this->str = new char[len + 1];
strncpy(this->str, str, len);
this->str[len] = 0;
}
Mystring(const Mystring &str, const unsigned int &index, const unsigned int &length)
{
len = length;
this->str = new char[len + 1];
bzero(this->str, len+1);
strncpy(this->str, str.str+index, len);
}
//拷贝构造函数
Mystring(const Mystring &str)
{
this->len = str.len;
this->str = new char[this->len + 1];
strcpy(this->str, str.str);
}
//拷贝赋值构造函数
Mystring & operator=(const Mystring &str)
{
if(nullptr != this->str)
delete [](this->str);
this->len = str.len;
this->str = new char[this->len+1];
strcpy(this->str, str.str);
}
//析构函数
~Mystring()
{
if(nullptr != str)
delete []str;
}
//按下标获取字符串字符
const char at(int index)
{
if(index < 0 || index > len)
{
std::cout << "out_of_range" << std::endl;
return -1;
}
return str[index];
}
//获取字符串首地址
const char *data()
{
return str;
}
//判断字符串是否为空
bool empty()
{
if(nullptr == str)
return true;
return false;
}
//获取字符串长度
int length()
{
return len;
}
private:
char *str;
unsigned int len;
};