1.自己封装一个string 类
#include <iostream>
#include <cstring>
using namespace std;
//string类的功能是给定一个
class myString
{
private:
char *str;//用于指向堆区申请空间的首地址
int size;//用于存储申请的空间大小
public:
//无参构造
myString():size(32) //参构造需要初始化列表 来给成员初始化
{
//下列是申请的操作
str=new char[size];
strcpy(str,"");//调用无参构造后,在堆区申请一片空间,将内容赋值为空
}
//有参构造
myString(const char *s)//有参构造的参数s用于给申请的堆区空间中赋值,并申请对应大小的空间
{
size=strlen(s);
str=new char[size+1];
strcpy(str,s);
}
//拷贝构造函数,需要使用列表
myString(myString &other):size(other.size)
{
str=new char[other.size];
strcpy(str,other.str);
}
//祈构函数
~myString()
{
delete []str;
str=nullptr;
cout<<"myString::析构函数"<<endl;
}
//判空函数
int myempty()
{
if(strlen(str))
{
return 0;
}
else
{
return 1;
}
}
//size函数
int len()
{
int sub=strlen(str);
return sub;
}
//c_str函数
char *my_c_str()
{
return str;
}
//at函数
char &my_at(int pos)
{
return str[pos];
}
};
int main()
{
myString s1("hello world"); //s1调用有参构造
myString s2=s1; //s2调用拷贝构造函数
//使用len函数
cout<<"s2 = "<<s2.len()<<endl;
//使用at函数
s2.my_at(4)='B';
cout<<s2.my_c_str()<<endl;//打印s2中的值
myString s3;
//使用判空
if(s3.myempty())
{
cout<<"empty"<<endl;
}
else
{
cout<<"not empty"<<endl;
}
//使用c_str
char buf[]="ni hao";
myString s4=s1;
strcpy(buf,s4.my_c_str());
cout<<buf<<endl;
return 0;
}