#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class MyString
{
public:
MyString();
MyString(const char* const p);
MyString(const MyString & s);
~MyString();
MyString& operator = (const MyString &s);
MyString& operator = (const char * p);
MyString& operator + (const MyString &s);
MyString& operator +=(const MyString &s);
char &operator [](const int i);
friend ostream& operator <<(ostream & out, const MyString& s);
const char* getstring() const;
int length() const;
int size() const;
private:
char *str;
int len;
};
MyString::MyString()
{
str = new char[1];
str[0] = '\0';
len = 0;
}
MyString::MyString(const char* const p)
{
if (p != NULL) {
len = strlen(p);
str = new char[len + 1];
strcpy(str, p);
}
else {
MyString();
}
}
MyString::MyString(const MyString &s) {
len = s.length();
str = new char[len + 1];
strcpy(str, s.str);
}
MyString::~MyString()
{
delete[] str;
len = 0;
}
int MyString::length() const
{
return len;
}
int MyString::size() const
{
return len;
}
MyString& MyString::operator = (const MyString &s) {
if (&s == this) {
return *this;
}
delete[] str;
len = s.length();
str = new char[len + 1];
strcpy(str, s.str);
return *this;
}
MyString& MyString::operator = (const char * p) {
delete[] str;
len = strlen(p);
str = new char[len + 1];
strcpy(str, p);
return *this;
}
char &MyString::operator [](const int i) {
if (i >= len) {
cout << "warning" << endl;
return str[len - 1];
}
return str[i];
}
const char* MyString::getstring() const {
return str;
}
ostream & operator <<(ostream & out, const MyString& s) {
out << s.getstring();
return out;
}
MyString& MyString::operator +(const MyString &s) {
char *temp = str;
int len = strlen(temp) + strlen(s.str);
str = new char[len + 1];
strcpy(str, temp);
delete[] temp;
strcat(str, s.str);
return *this;
}
MyString& MyString::operator +=(const MyString &s) {
char *temp = str;
int len = strlen(temp) + strlen(s.str);
str = new char[len + 1];
strcpy(str, temp);
delete[] temp;
strcat(str, s.str);
return *this;
}
int main() {
MyString str1 = MyString("hello ");
MyString str2 = "world";
str1 += str2;
cout << str1;
system("pause");
return 0;
}