要求:
class my_string
{
private:
char *str;
int len;
publuc:
//无参构造
//有参构造
//拷贝构造
//拷贝赋值
//判空
//bool my_empty()
//求长度
//int my_size()
//转化为c风格字符串
//char *my_str()
};
功能实现
1)无参构造
my_string()
{
str=new char[1];
*str='\0';
len = 0;
}
2)有参构造
my_string(const char *s)
{
len = strlen(s); //获取字符串长度
str = new char[len+1]; //申请足够的空间存放字符串
strcpy(str,s); //拷贝内容
}
3)拷贝构造
my_string(const my_string& S) //深拷贝
{
str = new char[len+1];
strcpy(str,S.str);
this->len = S.len;
}
4)拷贝赋值
my_string& operator=(const my_string& R)
{
if(this!=&R)
{
this->str = R.str;
this->len = R.len;
}
return *this;
}
5)判空
bool my_empty()
{
if(*str == 0)
return true;
else
return false;
}
6)求长度
int my_size()
{
int size = 0;
char *p = str;
while(*p++ != '\0'){ size++; }
return size;
}
7)转化为c风格字符串
char *my_str()
{
return str;
}
8)完整代码
#include <iostream>
#include <cstring>
using namespace std;
class my_string
{
public:
//无参构造
my_string()
{
str=new char[1];
*str='\0';
len = 0;
}
//有参构造
my_string(const char *s)
{
len = strlen(s); //获取字符串长度
str = new char[len+1]; //申请足够的空间存放字符串
strcpy(str,s); //拷贝内容
}
//拷贝构造
my_string(const my_string& S) //深拷贝
{
str = new char[len+1];
strcpy(str,S.str);
this->len = S.len;
}
//拷贝赋值
my_string& operator=(const my_string& R)
{
if(this!=&R)
{
this->str = R.str;
this->len = R.len;
}
return *this;
}
//判空
bool my_empty()
{
if(*str == 0)
return true;
else
return false;
}
//求长度
int my_size()
{
int size = 0;
char *p = str;
while(*p++ != '\0'){ size++; }
return size;
}
//转化为c风格字符串
char *my_str()
{
return str;
}
void display()
{
cout<<"str:"<<str<<'\t'<<"len:"<<len<<endl;
}
private:
char *str;
int len;
};
int main()
{
my_string s1("hqyj");
my_string s2;
s1.display();
s2.display();
s2 = s1;
s1.display();
s2.display();
my_string s3 =s2;
s3.display();
return 0;
}
9)运行结果
str:hqyj len:4
str: len:0
str:hqyj len:4
str:hqyj len:4
str:hqyj len:4