mystring.h
-
#ifndef _MYSTRING_H_
-
#define _MYSTRING_H_
-
#include <iostream>
-
using namespace std;
-
class Mystring
-
{
-
//<< >> 全局函数
-
friend istream & operator >> (istream &in ,Mystring & s1); // 重载 >>
-
friend ostream & operator << (ostream &out, const Mystring & s1); //重载 <<
-
private:
-
char *m_data;
-
int m_len;
-
void init();
-
public:
-
Mystring();
-
Mystring(char *str);
-
Mystring(int l, char ch);
-
Mystring(const Mystring &s);
-
Mystring & operator =( Mystring &s);
-
Mystring & operator +=(Mystring &s);
-
char & operator [](int index);
-
};
-
#endif
mystring.cpp
-
#include "mystring.h"
-
#include <string.h>
-
#include <iostream>
-
#pragma warning(disable:4996)
-
using namespace std;
-
void Mystring::init()
-
{
-
m_len = 1;
-
m_data = new char[m_len+1];
-
}
-
Mystring::Mystring()
-
{
-
init();
-
}
-
Mystring::Mystring(char *str)
-
{
-
m_len = strlen(str);
-
m_data = new char[m_len + 1];//注意+1
-
strcpy(this->m_data, str);
-
}
-
Mystring::Mystring(int l, char ch)
-
{
-
m_len = l;
-
m_data = new char[m_len + 1];
-
for (int i = 0; i < l; i++)
-
{
-
m_data[i] = ch;
-
}
-
m_data[l] = '\0';//!!!!!!!!!!!!!!!!!!!!!!!!!!
-
}
-
Mystring::Mystring(const Mystring &s)
-
{
-
this->m_len = s.m_len;
-
m_data = new char[m_len + 1];//!!!!!!!!!!!!
-
strcpy(this->m_data , s.m_data);
-
}
-
istream & operator >>(istream &in,Mystring &s)//重载 >>
-
{
-
char tmp[1024] = {0};
-
in >> tmp;
-
if (s.m_data != NULL)
-
{
-
delete s.m_data;
-
}
-
-
s.m_len = strlen(tmp);
-
s.m_data = new char[s.m_len + 1];//注意+1
-
strcpy(s.m_data, tmp);
-
return in;
-
}
-
ostream & operator << (ostream &out, const Mystring &s1)//重载 <<
-
{
-
out << s1.m_data;
-
return out;
-
}
-
Mystring& Mystring::operator =(Mystring &s)//重载 >>
-
{
-
m_len = s.m_len;
-
if (m_data != NULL)
-
{
-
delete m_data;
-
}
-
m_data = new char[s.m_len + 1];//注意+1
-
strcpy(m_data, s.m_data);
-
return *this;
-
}
-
Mystring & Mystring::operator +=(Mystring &s)
-
{
-
m_len = m_len + s.m_len;
-
char *tmp = new char [m_len + 1];
-
strcpy(tmp, m_data);
-
strcat(tmp,s.m_data);
-
-
delete m_data;
-
m_data = tmp;
-
return *this;
-
}
-
char & Mystring::operator [](int index)
-
{
-
return m_data[index];
-
}
main.cpp
-
#include <iostream>
-
#include "mystring.h"
-
using namespace std;
-
int main()
-
{
-
Mystring s1;
-
Mystring s2("hello");
-
Mystring s3(10, 'a');
-
Mystring s4 = s2;
-
Mystring s5(s2);
-
cin >> s1;
-
cout << "s1 = " << s1 << endl;
-
cout << "s2 = " << s2 << endl;
-
cout << "s3 = " << s3 << endl;
-
cout << "s4 = " << s4 << endl;
-
cout << "s5 = " << s5 << endl;
-
s1 += s2;
-
cout << s1 << endl;
-
cout << s1[0] << endl;
-
s1[1] = '1';
-
cout << s1 << endl;
-
system("pause");
-
return 0;
-
}