首页 / C++ / c++ MyString类实现
c++ MyString类实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c++ MyString类实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3294字,纯文字阅读大概需要5分钟。
内容图文
![c++ MyString类实现](/upload/InfoBanner/zyjiaocheng/760/c2402970a33a4edd9493f52ec6f5ec9b.jpg)
string类中各成员函数的实现
一、string类的定义
class MyString
{
public:
MyString();
MyString(char *sz);
MyString(const MyString &other);
MyString& operator=(const MyString &rhs);
MyString& operator=(const char *str);
char& operator[](unsigned int index);
const char& operator[](unsigned int index) const;
friend MyString operator+(const MyString &s1, const MyString &s2);
friend ostream& operator<<(ostream &os, const MyString &str);
friend istream& operator>>(istream &is, MyString &str);
bool isEmpty();
~MyString();
int assign(const char *obj);
void display() const;
int replace(const char *from, const char *to);
int append(const char *obj);
unsigned int getSize() const;
private:
char *m_data;
unsigned int m_len;
};
二、类成员函数的实现
MyString::MyString()
{
m_data = NULL;
m_len = 0;
}
MyString::MyString(char *sz)
{
m_len = strlen(sz);
m_data = new char[m_len + 1];
strcpy(m_data, sz);
}
MyString::MyString(const MyString &other)
{
m_len = other.m_len;
m_data = new char[m_len];
strcpy(m_data, other.m_data);
}
MyString& MyString::operator=(const MyString &rhs)
{
if(this == &rhs)
{
return *this;
}
if(m_data != NULL)
{
delete []m_data;
}
m_len = rhs.m_len;
m_data = new char[m_len + 1];
strcpy(m_data, rhs.m_data);
return *this;
}
MyString& MyString::operator=(const char *str)
{
if(m_data != NULL)
{
delete []m_data;
}
m_len = strlen(str);
m_data = new char[m_len + 1];
strcpy(m_data, str);
return *this;
}
char& MyString::operator[](unsigned int index)
{
cout << "char& MyString::operator[](unsigned int index)" << endl;
return *(m_data + index); //m_data[index]
}
const char& MyString::operator[](unsigned int index) const
{
cout << "const char& MyString::operator[](unsigned int index) const" << endl;
return *(m_data + index);
}
bool MyString::isEmpty()
{
return m_len == 0; //m_len
}
MyString::~MyString()
{
if(m_data != NULL)
{
delete []m_data;
}
}
int MyString::assign(const char *obj)
{
if(m_data != NULL)
{
delete []m_data;
}
m_len = strlen(obj);
m_data = new char[m_len + 1];
strcpy(m_data, obj);
}
void MyString::display() const
{
if(m_data == NULL)
{
cout << "str is NULL" <<endl;
}
cout << m_data << endl;
}
int MyString::replace(const char *from, const char *to)
{
char *q,*tmp,*cur;
tmp = strstr(m_data, from);
if(strlen(from) < strlen(to) || tmp == NULL)
{
return -1;
}
char *p = new char[m_len];
q = p;
cur = m_data;
for(int i = 0; i < (tmp - m_data); i++)
{
*q = *cur;
q++;
cur++;
}
*q = '\0';
strcat(p, to);
tmp = tmp + strlen(from);
strcat(p,tmp);
m_data = p;
return 0;
}
int MyString::append(const char *obj)
{
m_len += strlen(obj);
char *tmp = new char[m_len + 1];
char *p = tmp, *q = m_data;
while(*q != '\0')
{
*p = *q;
p++;
q++;
}
if(m_data != NULL)
{
delete []m_data;
m_data = NULL;
}
strcat(tmp,obj);
m_data = tmp;
return 0;
}
unsigned int MyString::getSize() const
{
return m_len;
}
三、友元函数的实现
MyString operator+(const MyString &s1, const MyString &s2)
{
int len = strlen(s1.m_data) + strlen(s2.m_data);
MyString tmp;
tmp.m_data = new char[len + 1];
tmp.m_len = len;
strcat(tmp.m_data,s1.m_data);
strcat(tmp.m_data,s2.m_data);
return tmp;
}
ostream& operator<<(ostream &os, const MyString &str)
{
os << str.m_data;
return os;
}
istream& operator>>(istream &is, MyString &str)
{
if(str.m_data != NULL)
{
delete []str.m_data;
str.m_data = NULL;
str.m_len = 0;
}
char tmp[1024] = {0};
cin >> tmp;
str.m_len = strlen(tmp);
str.m_data = new char[str.m_len + 1];
strcpy(str.m_data,tmp);
return is;
}
内容总结
以上是互联网集市为您收集整理的c++ MyString类实现全部内容,希望文章能够帮你解决c++ MyString类实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。