#include <iostream>
#include <string.h>
using namespace std;
class String
{
public:
//构造函数
String(const char *ptr){
if (ptr == nullptr){
mpstr = new char[1];
mpstr[0] = '\0';
}else{
mpstr = new char[strlen(ptr) + 1];
strcpy(mpstr, ptr);
}
}
//拷贝构造函数
String(const String &src){
mpstr = new char[strlen(src.mpstr) + 1];
strcpy(mpstr, src.mpstr);
}
//复制运算符的重载函数
String& operator=(const String &src){
if (this == &src)
return *this;
delete[]mpstr;
mpstr = new char[strlen(src.mpstr) + 1];
strcpy(mpstr, src.mpstr);
return *this;
}
~String(){
delete[]mpstr;
mpstr = nullptr;
}
bool operator>(const String &src){
if (strcmp(mpstr, src.mpstr) > 0)
return true;
return false;
}
bool operator<(const String &src){
if (strcmp(mpstr, src.mpstr) < 0)
return true;
return false;
}
bool operator==(const String &src){
if (strcmp(mpstr, src.mpstr) == 0)
return true;
return false;
}
//获取字符串的长度
int length()const{ return strlen(mpstr); }
//根据下标返回对应的字符
char& operator[](int index){ return mpstr[index]; }
//返回该字符串
const char* c_str()const{ return mpstr; }
private:
char *mpstr;
friend String operator+(const String &lhs, const String &rhs);
friend ostream& operator<<(ostream &out, const String &src);
};
//operator+
String operator+(const String &lhs, const String &rhs){
/*char* temp = new char[lhs.length() + rhs.length() + 1];
strcpy(temp, lhs.mpstr);
strcat(temp, rhs.mpstr);
return String(temp);*/
String str;
char* temp = new char[lhs.length() + rhs.length() + 1];
strcpy(str.mpstr, lhs.mpstr);
strcat(str.mpstr, rhs.mpstr);
return str;
}
ostream& operator<<(ostream &out, const String &src){
out << src.mpstr;
return out;
}
int main(){
String str1;
String str2 = "hello";
String str3 = "world";
String str4 = str2 + str3;
return 0;
}
string类
最新推荐文章于 2023-03-03 15:53:49 发布