作业
#include <iostream>
#include <cstring>
using namespace std;
class My_string{
private:
char *ptr;
int size;
int len;
public:
//无参构造
My_string():size(15){
this->ptr=new char[size];
this->ptr[0]='\0';
this->len=0;
}
//有参构造
My_string(const char*src):len(0){
len=strlen(src);
this->size=this->len+1;
this->ptr=new char[size];
strcpy(ptr,src);
}
My_string(int num,char value):size(num+1),len(num){
ptr=new char[size];
for(int i=0;i<len;i++){
ptr[i]=value;
}
ptr[len]='\0';
}
//拷贝构造
My_string(const My_string&other){
size=other.size;
len=other.len;
ptr=new char[other.size];
strcpy(ptr,other.ptr);
}
//拷贝赋值
My_string& operator=(const My_string&other){
if(this==&other){
return *this;
}
size=other.size;
len=other.size;
ptr=new char[other.size];
strcpy(ptr,other.ptr);
}
//析构
~My_string(){
delete[] ptr;
}
//判空
bool isempty(){
return len==0;
}
//尾插
void push_back(char value){
if(len+1>=size){
size+=1;
char *new_ptr=new char(size);
strcpy(new_ptr,ptr);
delete []ptr;
ptr=new_ptr;
}
ptr[len++]=value;
ptr[len]='\0';
}
//尾删
void pop_back(){
if(len>0){
ptr[--len]='\0';
}
}
//at
char &at(int index){
return ptr[index];
}
//清空
void clear(){
len=0;
ptr[0]='\0';
}
//获取c风格字符串
void *data(){
return ptr;
}
//获取实际长度
int get_length(){
return len;
}
//获取最大容量
int get_size(){
return size;
}
//二倍扩充,注意new_ptr不需要delete回收是因为这个是栈空间,函数结束会自动回收。
void double_capacity(){
size*=2;
char *new_ptr=new char[size];
strcpy(new_ptr,ptr);
delete []ptr;
ptr=new_ptr;
}
};
int main()
{
cout << "Hello World!" << endl;
return 0;
}