class MyString {
friend ostream& operator<<(ostream &out, MyString &s);
private:
int m_len;
char *m_p;
public:
MyString();
MyString(const char *p);
MyString(const MyString& s);
~MyString();
MyString& operator=(const char *p);
MyString& operator=(const MyString& s);
char& operator[](int index);
bool operator==(const char *p);
bool operator==(const MyString& s);
bool operator!=(const char *p);
bool operator!=(const MyString& s);
int operator<(const char *p);
int operator>(const char *p);
int operator<(const MyString& s);
int operator>(const MyString& s);
char *c_str()
{
return m_p;
}
const char *c_str2()
{
return m_p;
}
int length()
{
return m_len;
}
};
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include "MyString.h"
MyString::MyString() {
m_len = 0;
m_p = new char[m_len + 1];
strcpy(m_p, "");
}
MyString::MyString(const char *p) {
if (p == NULL) {
m_len = 0;
m_p = new char[m_len + 1];
strcpy(m_p, "");
}
else {
m_len = strlen(p);
m_p = new char[m_len + 1];
strcpy(m_p, p);
}
}
MyString::MyString(const MyString& s) {
m_len = s.m_len;
m_p = new char[m_len + 1];
strcpy(m_p, s.m_p);
}
MyString::~MyString() {
if (m_p != NULL) {
delete[] m_p;
m_p = NULL;
m_len = 0;
}
}
MyString& MyString::operator=(const char *p) {
if (m_p != NULL) {
delete[] m_p;
m_p = NULL;
m_len = 0;
}
if (p = NULL) {
m_len = 0;
m_p = new char[m_len + 1];
strcpy(m_p, "");
}
else {
m_len = strlen(p);
m_p = new char[m_len + 1];
strcpy(m_p, p);
}
return *this;
}
MyString& MyString::operator=(const MyString& s) {
if (m_p != NULL) {
delete[] m_p;
m_p = NULL;
m_len = 0;
}
m_len = s.m_len;
m_p = new char[m_len + 1];
strcpy(m_p, s.m_p);
return *this;
}
char& MyString::operator[](int index) {
return m_p[index];
}
ostream& operator<<(ostream &out, MyString &s) {
cout << s.m_p;
return out;
}
bool MyString::operator==(const char *p) {
if (p == NULL) {
if (m_len == 0)
return true;
else
return false;
}
else {
if (m_len == strlen(p))
return !strcmp(m_p, p);
else
return false;
}
}
bool MyString::operator==(const MyString& s) {
if (m_len != s.m_len)
return false;
else
return !strcmp(m_p, s.m_p);
}
bool MyString::operator!=(const char *p) {
return !(*this == p);
}
bool MyString::operator!=(const MyString& s) {
return !(*this == s);
}
int MyString::operator<(const char *p)
{
return strcmp(this->m_p , p);
}
int MyString::operator>(const char *p)
{
return strcmp(p, this->m_p);
}
int MyString::operator<(const MyString& s)
{
return strcmp(this->m_p , s.m_p);
}
int MyString::operator>(const MyString& s)
{
return strcmp(s.m_p, m_p);
}
#include <iostream>
using namespace std;
#include "MyString.h"
void func() {
MyString s1;
MyString s2("s2");
MyString s3 = s2;
if (s2 == "s222")
cout << "equal" << endl;
else
cout << "unequal" << endl;
if (s3 == s2)
cout << "equal" << endl;
else
cout << "unequal" << endl;
}
void func1()
{
MyString s1;
MyString s2("s2");
MyString s3 = s2;
s3 = "aaa";
int tag = (s3 < "bbbb");
if (tag < 0 )
{
printf("s3 小于 bbbb");
}
else
{
printf("s3 大于 bbbb");
}
MyString s4 = "aaaaffff";
strcpy(s4.c_str(), "aa111");
cout<<s4<<endl;
}
void func2()
{
MyString s1(128);
cout<<"\n请输入字符串(回车结束)";
cin>>s1;
cout<<s1;
}
void func3()
{
MyString s1(128);
cout<<"\n请输入字符串(回车结束)";
cin>>s1;
cout<<s1<<endl;
}
int main() {
MyString s1;
MyString s2("hello");
MyString s2_2 = NULL;
MyString s3 = s2;
MyString s4 = "444";
s4 = "acd";
s4 = s2;
s4[0] = '4';
cout << s4 << endl;
func();
func1();
func2();
func3();
return 0;
}