![](https://i-blog.csdnimg.cn/direct/fb4f485b76fd45b7a3264a454cb29ed9.png)
#ifndef ZUOYE_H
#define ZUOYE_H
#include <iostream>
using namespace std;
int strlen(const char *s);
bool strcpy(char *str,const char *s);
class myString
{
private:
char *str; //记录c风格的字符串
int size; //记录字符串的实际长度
public:
//无参构造
myString():size(10)
{
str = new char[size];//构造出一个长度为10的字符串
}
//有参构造
myString(const char *s)
{
size=strlen(s);
str=new char[size+1];
strcpy(str,s);
cout<<"有参构造"<<endl;
}
//判空函数
bool string_empty();
//size函数
int string_size();
//c_str函数
char* c_str();
//at函数
//at函数
char &at(int index)
{
char &at=str[index];
return at;
}
//二倍扩容
bool erbei();
//析构函数
~myString()
{
delete str;
}
};
#endif // ZUOYE_H
#include "zuoye.h"
//判空函数
bool myString::string_empty()
{
return size==0;
}
//size函数
int myString::string_size()
{
return size;
}
//c_str函数
char* myString::c_str()
{
return str;
}
//二倍扩容
bool myString::erbei()
{
char* btr;
btr=new char(size*2);
strcpy(btr,str);
delete str;
str=btr;
}
int strlen(const char *s)
{
int size=sizeof(s);
for(int i=0;i<size;i++)
{
if(s[i]=='\0')
{
return i;
break;
}
}
return size;
}
bool strcpy(char *str,const char *s)
{
while(*s)
{
*str=*s;
s++;
str++;
}
*str='\0';
}
#include "zuoye.h"
using namespace std;
int main()
{
myString s1("asdqwer");
if(s1.string_empty())
{
cout<<"空字符串"<<endl;
}else cout<<"非空"<<endl;
cout<<s1.string_size()<<endl;
cout<<s1.c_str()<<endl;
char &ab=s1.at(2);
ab='2';
cout<<s1.c_str()<<endl;
s1.erbei();
cout<<s1.string_size()<<endl;
return 0;
}
![](https://i-blog.csdnimg.cn/direct/a9acc72f49c94330b6ccb4db6cda3ffd.png)