欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 2024.9.2

2024.9.2

2025/6/17 14:47:10 来源:https://blog.csdn.net/Tak1Na/article/details/141833179  浏览:    关键词:2024.9.2

还没写完 

#include <iostream>
#include <cstring>
using namespace std;class myString
{
private:char *str;          //字符串int size;           //实际字符长度int len;            //字符串容量
public:myString():size(10)     //无参构造函数{len = size + 1;str = new char[size];}myString(const char*s):size(strlen(s))      //有参构造函数{//cout<<size<<endl;len = size + 1;str = new char[size+1];strcpy(str,s);}~myString()         //析构函数{delete []str;}myString &operator=(const myString &R);     //=重载char &at(const int &index);                 //atchar &operator[](const int &index);         //下标重载char *data();       //datachar *c_str();      //c_strbool empty();       //判空int sszie();        //字符实际长度int capcity();      //字符串容量void clear();       //清空void push_back(const char &s);   //尾插1个字符void pop_back();    //尾删1个字符void expand();      //二倍扩容myString &operator+=(const myString &R); //+=重载myString &operator+(const myString &R);myString &operator+(const char &R);void show();        //展示
};
//=
myString & myString:: operator=(const myString &R)
{/*delete [] str;size = R.size;len = R.len;char *newstr = new char[len];strcpy(newstr,R.str);str = newstr;*/size = R.size;len = R.len;char *newstr = new char[len];strcpy(newstr,R.str);delete [] str;str = newstr;return *this;
}
//at
char &myString :: at(const int &index)
{if(index > size || index < 0)       //判断是否下标越界{cout<<"下标越界"<<endl;exit(0);}return str[index];
}//[]
char &myString::operator[](const int &index)
{return str[index];
}
//data
char *myString ::data()
{return &str[0];
}
//c_str
char *myString :: c_str()
{return str;
}
//empty
bool myString::empty()
{return size==0;
}
//ssize
int myString::sszie()
{return size;
}
//capcity
int myString::capcity()
{return len;
}
//clear
void myString::clear()
{
//    delete [] str;
//    str = new char[size+1];memset(str,0,size+1);
}
//show
void myString ::show()
{
//    cout<<size<<endl;
//    cout<<strlen(str)<<endl;cout<<str<<endl;
}
//尾插
void myString::push_back(const char &s)
{if((size + 1) >= len)       //判断是否需要二倍扩容{expand();}str[size] = s;size++;str[size] = '\0';
}
//尾删一个字符
void myString::pop_back()
{str[size-1] = 0;size--;
}
//+=
myString & myString::operator+=(const myString &R)
{while(size + int(strlen(R.str)) >= len){expand();}strcat(this->str,R.str);return *this;
}
//二倍扩容
void myString::expand()
{len = len * 2 - 1;char*newstr = new char[len];memset(newstr,0,len);strcpy(newstr,str);delete []str;str = newstr;
}
//+
myString &myString::operator+(const myString &R)        //两个字符串相加
{while((size + R.size) >= len){expand();}strcat(str,R.str);size = size + R.size;return *this;
}
myString &myString::operator+(const char &R)        //字符串和单个字符相加
{if(size + 1 >= len){expand();}push_back(R);return *this;
}
int main()
{myString s1("nihao");myString s2("hello world");s1 = s2;s1.show();cout<<s1.at(1)<<endl;s1[0] = 'H';s1.show();s1.push_back('!');s1.show();s1.pop_back();s1.show();myString s3;s3 = s1 + s2 + s2;s3.show();cout<<"**************"<<endl;s3 = s3 + '?' + '!';s3.show();s1.clear();s1.show();s1.at(-1);return 0;
}

版权声明:

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

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

热搜词