#include "kstring.h"
int kstring::m_number = 0;
kstring::kstring() //无参的构造函数
{
m_str = new char[1];
*m_str = '\0';
m_length = 0;
m_number++;
}
kstring::kstring(const char *t_str) //有参的构造函数
{
if(t_str == NULL)
{
m_str = new char[1];
*m_str = '\0';
m_length = 0;
}
else
{
m_length = strlen(t_str);
m_str = new char[m_length + 1];
strcpy(m_str,t_str);
*(m_str + m_length) = '\0';
}
m_number++;
}
kstring::kstring(const kstring &t_str) //拷贝构造函数
{
m_length = t_str.m_length;
m_str = new char[m_length + 1];
strcpy(m_str,t_str.m_str);
*(m_str + m_length) = '\0';
m_number++;
}
kstring::~kstring() //析构函数
{
delete [] m_str;
m_str = NULL;
m_length = 0;
m_number--;
}
kstring & kstring::operator = (const kstring &t_str) //重载赋值操作符
{
if(this != &t_str)
{
if(m_length > t_str.m_length)
{
m_length = t_str.m_length;
strcpy(m_str,t_str.m_str);
*(m_str + m_length) = '\0';
}
else
{
delete [] m_str;
m_length = t_str.m_length;
m_str = new char[m_length + 1];
strcpy(m_str,t_str.m_str);
*(m_str + m_length) = '\0';
}
}
return *this;
}
kstring & kstring::operator = (const char *t_str)
{
if(t_str != NULL)
{
if(m_length > strlen(t_str))
{
m_length = strlen(t_str);
strcpy(m_str,t_str);
*(m_str + m_length) = '\0';
}
else
{
delete [] m_str;
m_length = strlen(t_str);
m_str = new char[m_length + 1];
strcpy(m_str,t_str);
*(m_str + m_length) = '\0';
}
}
return *this;
}
kstring & kstring::operator += (const kstring &t_str) //重载+=操作符,在后面追加Kstring对象
{
char *t_str1 = m_str;
int t_length = m_length;
m_length = m_length + t_str.m_length;
m_str = new char[m_length + 1];
strcpy(m_str,t_str1);
strcpy(m_str+t_length,t_str.m_str);
*(m_str + m_length) = '\0';
delete [] t_str1;
t_str1 = NULL;
return *this;
}
kstring & kstring::operator += (const char *t_str) //重载+=操作符,在后面追加字符串
{
char *t_str1 = m_str;
int t_length = m_length;
m_length = m_length + strlen(t_str);
m_str = new char[m_length + 1];
strcpy(m_str,t_str1);
strcpy(m_str + t_length,t_str);
*(m_str + m_length) = '\0';
delete [] t_str1;
t_str1 = NULL;
return *this;
}
kstring & kstring::operator += (const char t_c) //重载+=操作符,在后面追加字符
{
char *t_str1 = m_str;
int t_length = m_length;
m_length = m_length + 1;
m_str = new char[m_length + 1];
strcpy(m_str,t_str1);
*(m_str + t_length) = t_c;
*(m_str + m_length) = '\0';
delete [] t_str1;
t_str1 = NULL;
return *this;
}
bool operator == (const kstring &t_str1,const kstring &t_str2) //重载比较操作符
{
return strcmp(t_str1.m_str,t_str2.m_str) == 0;
}
bool operator != (const kstring &t_str1,const kstring &t_str2) //重载不等于操作符
{
return strcmp(t_str1.m_str,t_str2.m_str) != 0;
}
char kstring::operator [] (int t_index) const //重载下标操作符
{
return *(m_str + t_index);
}
ostream& operator << (ostream &os, const kstring &t_str) //使用友元函数重载输出操作符
{
os << t_str.m_str;
return os;
}
istream& operator >> (istream &is, kstring &t_str) //使用友元函数重载输入操作符
{
is >> t_str.m_str;
return is;
}
kstring operator + (const kstring &t_str1,const kstring &t_str2)
{
kstring t_str;
int t_length = t_str1.m_length + t_str2.m_length;
t_str.m_length = t_length;
t_str.m_str = new char[t_length + 1];
strcpy(t_str.m_str,t_str1.m_str);
strcpy(t_str.m_str + t_str1.m_length,t_str2.m_str);
*(t_str.m_str + t_length) = '\0';
return t_str;
}