#include <iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
class MY_string
{
public:
char *ptr;
int len;
int size;
public:
MY_string():size(15)
{
this->ptr = new char[size];
memset(ptr,'\0',size);
this->len=0;
}
//有参构造
MY_string(const char *src)
{
this->len=strlen(src);
this->size=strlen(src)+1;
if(src)
{
this->ptr = new char[strlen(src)+1];
strcpy(ptr,src);
}
else
{
this->ptr=new char[1];
this->ptr[0]='\0';
}
}
//析构函数
~MY_string()
{
delete[] ptr;
cout<<"析构函数"<<this<<endl;
}
MY_string(int num ,char value)
{
if(num>0)
{
this->ptr=new char[num+1];
this->len=num;
this->size=num+1;
for(int i=0;i<num;i++)
{
ptr[i]=value;
}
}
else
{
printf("输入错误\n");
}
}
//拷贝构造
MY_string(const MY_string &other)
{
delete[] ptr;
this->ptr=new char[sizeof(other)];
this->len=sizeof(other)-1;
this->size=sizeof(other);
strcpy(ptr,other.ptr);
}
//拷贝赋值
MY_string & operator=(const MY_string &other)
{
this->ptr=new char[other.size];
strcpy(this->ptr,other.ptr);
this->len=other.len;
this->size=other.size;
return *this;
}
//判空
void MY_empty()
{
if(this->len==this->size||this->size==1||*(this->ptr)=='\0')
{
cout<<"字符串为空"<<endl;
}
}
void MY_full()
{
if(this->len==((this->size)-1))
{
cout<<"字符串已满"<<endl;
}
}
//尾插 //君子函数
void push_back(char p)
{
if((len+1)%15==0||len+1==size)
{
(this->size)+=15;
char buff[this->size];
strcpy(buff,this->ptr);
delete[] this->ptr;
this->ptr=new char[this->size];
memset(this->ptr,'\0',this->size);
strcpy(this->ptr,buff);
}
(this->len)++;
this->ptr[(this->len)-1]=p;
return;
}
//尾删
void pop_back()
{
(this->ptr)[(this->len)-1]='\0';
this->size=(this->size)-1;
this->len=(this->len)-1;
return;
}
//at函数实现
char &at(int index)
{
cout<<ptr[index-1]<<endl;
return ptr[index-1];
}
//清空函数
void clear()
{
memset(ptr,0,sizeof(size));
return;
}
//返回C风格字符串
void *data()
{
return ptr;
}
//返回实际长度
int get_length()
{
return this->len;
}
//返回当前最大容量
int get_size()
{
return this->size;
}
};
int main()
{
//无参构造
MY_string s;
s={"fewfew"};
//printf("%s\n",s);
cout<<"s ="<<s.ptr<<endl;
//有参构造
MY_string s1("H11111");
cout<<"s1 ="<<s1.ptr<<endl;
// printf("%s\n",s1);
MY_string s2(5,'A');
cout<<"s2 ="<<s2.ptr<<endl;
//printf("%s\n",s2);
//拷贝构造
MY_string s3(s1);
cout<<endl;
cout<<"s3 ="<<s3.ptr<<endl;
//拷贝赋值
s3.operator=(s2);
cout<<"s3 ="<<s3.ptr<<" size ="<<s3.size<<endl;
//判空
MY_string s4;
cout<<"s4 =";
s4.MY_empty();
//尾插
s3.push_back('S');
cout<<"s3 ="<<s3.ptr<<" size ="<<s3.size<<endl;
//尾删
s3.pop_back();
cout<<"s3 ="<<s3.ptr<<" size ="<<s3.size<<endl;
//at函数实现
s1.at(1)='Y';
cout<<"s1 ="<<s1.ptr<<" size ="<<s1.size<<endl;
//清空函数
s1.clear();
cout<<"s1 ="<<s1.ptr<<" size ="<<s1.size<<endl;
//返回C风格的字符串
char buff[20];
strcpy(buff,(char *)s3.data());
cout<<"buff ="<<buff<<" size ="<<sizeof(buff)<<endl;
//返回实际长度
cout<<"实际长度 :"<<s3.get_length()<<endl;
//返回当前最大容量
cout<<"最大容量 :"<<s3.get_size()<<endl;
//君子函数
MY_string s5;
for(int i=0;i<50;i++)
{
s5.push_back('A');
cout<<"实际长度 :"<<s5.get_length()<<" 最大容量 :"<<s5.get_size()<<endl;
}
cout<<"s5 ="<<s5.ptr<<endl;
return 0;
}
C+string库(9.23)
最新推荐文章于 2024-09-26 09:13:29 发布