您的位置:首页 > 科技 > 能源 > 南宁公司网站建设方案_招商网站_品牌策划方案ppt_全球最大的磁力搜索引擎

南宁公司网站建设方案_招商网站_品牌策划方案ppt_全球最大的磁力搜索引擎

2024/12/25 1:14:55 来源:https://blog.csdn.net/m0_46380369/article/details/142501326  浏览:    关键词:南宁公司网站建设方案_招商网站_品牌策划方案ppt_全球最大的磁力搜索引擎
南宁公司网站建设方案_招商网站_品牌策划方案ppt_全球最大的磁力搜索引擎

My_string类中的所有能重载的运算符全部进行重载+、[] 、>、=、>)

仿照stack类实现my_stack,实现一个栈的操作

#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';}}//atchar &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;}My_string operator+(const My_string&other)const{My_string result;result.len=len+other.len;result.size=result.len+1;result.ptr=new char[result.size];strcpy(result.ptr,ptr);strcat(result.ptr,other.ptr);//虽然result在栈上的空间会自动释放,注意result的数组不是,需要析构函数手动删除return result;}My_string& operator+=(const My_string&other){len+=other.len;if(len+1>size){size=len+1;char *new_ptr=new char[size];strcpy(new_ptr,ptr);strcat(new_ptr,other.ptr);delete [] ptr;ptr=new_ptr;}else{strcat(ptr,other.ptr);}return *this;}My_string& operator+=(char value){push_back(value);return *this;}bool operator<(const My_string&other)const{return strcmp(ptr,other.ptr)<0;}bool operator>(const My_string&other)const{return strcmp(ptr,other.ptr)>0;}bool operator<=(const My_string&other)const{return strcmp(ptr,other.ptr)<=0;}bool operator>=(const My_string&other)const{return strcmp(ptr,other.ptr)>=0;}bool operator==(const My_string&other)const{return strcmp(ptr,other.ptr)==0;}friend ostream&operator<<(ostream&os,const My_string&str){os<<str.ptr;return os;}friend istream& operator>>(istream&is,My_string&str){char buffer[1024];is>>buffer;str=My_string(buffer);return is;}};class My_stack{
private:int* data;int capacity;int top;
public:My_stack(int size=10):capacity(size),top(-1){data=new int[size];}~My_stack(){delete []data;}void double_size(){capacity=2;int *new_ptr=new int[capacity];for(int i=0;i<=top;i++){new_ptr[i]=data[i];}delete []data;data=new_ptr;}bool isempty(){return top==-1;}void push(const int&value){if(top+1>=capacity){double_size();}data[++top]=value;}void pop(){if(isempty())return;else --top;}int get_top(){return data[top];}void swap(int index1,int index2){int temp=data[index1];data[index1]=data[index2];data[index2]=temp;}
};int main()
{My_string str1("Hello");My_string str2(" World");My_string str3 = str1 + str2;cout << "连接 " << str3 << endl;My_string str4;cout << "输入 ";cin >> str4;cout << "输入了" << str4 << endl;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com