首页IT科技自己编写strcmp函数(自己实现简单的string)

自己编写strcmp函数(自己实现简单的string)

时间2025-05-04 10:27:51分类IT科技浏览3465
导读:我们结合运算符重载知识实现string 类...

我们结合运算符重载知识实现string 类

在自己实现的String类中可以参考C++中string的方法

例如构造         ,加法                 ,大小比较,长度      ,[] 等操作.

当前的MyString 类中,暂时不加入迭代器,我们将在下一节中加入迭代器的代码. #include <iostream> using namespace std; class MyString { public: //构造函数 MyString(const char * pSource = nullptr) { if (pSource != nullptr) { pString = new char[strlen(pSource) + 1]; strcpy(pString, pSource); } else { pString = new char[1]; pString[0] = \0; } cout << "MyString构造函数,对象地址="<<this << endl; } //拷贝构造 MyString(const MyString & _rValue) { pString = new char[strlen(_rValue.pString) + 1]; strcpy(pString, _rValue.pString); cout << "MyString拷贝构造函数" << endl; } //赋值函数 MyString & operator=(const MyString & _rValue) { if (this == &_rValue) { return *this; } delete[] this->pString; this->pString = nullptr; char * _tpString = new char[strlen(_rValue.pString) + 1]; strcpy(_tpString, _rValue.pString); cout << "MyString赋值函数" << endl; } //可编辑 char & operator[](int index) { int len = strlen(this->pString); if (index<0) { return pString[0]; } else if (index>len) { return pString[index]; } else { return pString[index]; } } //不可编辑 const char operator[](int index) const { int len = strlen(this->pString); if (index<0) { return pString[0]; } else if (index>len) { return pString[index]; } else { return pString[index]; } } bool operator>(const MyString & _rValue) const { return strcmp(this->pString, _rValue.pString)>0; } bool operator<(const MyString & _rValue) const { return strcmp(this->pString, _rValue.pString)<0; } bool operator==(const MyString & _rValue) const { return strcmp(this->pString, _rValue.pString)==0; } int length() const { return strlen(this->pString); } ~MyString() { if (this->pString != nullptr) { delete[] this->pString; this->pString = nullptr; cout << "MyString析构函数" << this << endl; } } const char * c_str() const { return this->pString; } private: char * pString ; friend MyString operator+ (const MyString & s1, const MyString &s2) ; friend ostream & operator<<(ostream & out, const MyString &s) ; }; MyString operator+(const MyString & s1, const MyString &s2) { /* 方式1 这段代码有 内存泄漏问题 tp 没有释放掉 int newLength = strlen(s1.pString) + strlen(s2.pString) + 1; char *tp = new char[newLength + 1];//重新申请空间 strcpy(tp, s1.pString); strcat(tp, s2.pString); MyString s(tp); cout << "operator+ = " << &s << endl; return s; */ /* 方式2 对比方式1 效果更高 */ MyString s; int newLength = strlen(s1.pString) + strlen(s2.pString) + 1; s.pString = new char[newLength + 1];//重新申请空间 strcpy(s.pString, s1.pString); strcat(s.pString, s2.pString); cout << "operator+ = " << &s << endl; return s; } ostream & operator<<(ostream & out, const MyString &s) { cout << s.pString << endl; return out; } void test() { MyString s1("12345"); MyString s2("6789ABC"); cout << s1 << endl; cout << s2 << endl; MyString s3 = s1 + s2; cout << s3 << endl; cout << "s3 = " << &s3 << endl; for (int i = 0; i < s3.length(); i++) { cout << s3[i] << endl; } cout <<"--------------------" << endl; s3[0] = W; for (int i = 0; i < s3.length(); i++) { cout << s3[i] << endl; } const MyString s4("hello"); for (int i = 0; i < s4.length(); i++) { cout << s4[i] << endl; } } int main() { test(); system("pause"); return 0; }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
最新seo网站优化教程(SEO狂人:揭秘网站优化的秘密)