mystring.h整理

mystring.h

 
  1. #ifndef _MYSTRING_H_

  2. #define _MYSTRING_H_

  3.  
  4. #include <iostream>

  5. using namespace std;

  6. class Mystring

  7. {

  8.     //<< >> 全局函数

  9.     friend istream & operator >> (istream &in ,Mystring & s1); // 重载 >>

  10.     friend ostream & operator << (ostream &out, const Mystring & s1); //重载 <<

  11.  
  12. private:

  13.     char *m_data;

  14.     int m_len;

  15.     void init();

  16. public:

  17.     Mystring();

  18.     Mystring(char *str);

  19.     Mystring(int l, char ch);

  20.     Mystring(const Mystring &s);

  21.     Mystring & operator =( Mystring &s);

  22.     Mystring & operator +=(Mystring &s);

  23.     char & operator [](int index);

  24. };

  25. #endif

 

mystring.cpp

 
  1. #include "mystring.h"

  2. #include <string.h>

  3. #include <iostream>

  4. #pragma warning(disable:4996)

  5.  
  6. using namespace std;

  7.  
  8. void Mystring::init()

  9. {

  10.     m_len = 1;

  11.     m_data = new char[m_len+1];

  12. }

  13.  
  14. Mystring::Mystring()

  15. {

  16.     init();

  17. }

  18.  
  19. Mystring::Mystring(char *str)

  20. {

  21.     m_len = strlen(str);

  22.     m_data = new char[m_len + 1];//注意+1

  23.     strcpy(this->m_data, str);

  24. }

  25.  
  26. Mystring::Mystring(int l, char ch)

  27. {

  28.     m_len = l;

  29.     m_data = new char[m_len + 1];

  30.     for (int i = 0; i < l; i++)

  31.     {

  32.         m_data[i] = ch;

  33.     }

  34.     m_data[l] = '\0';//!!!!!!!!!!!!!!!!!!!!!!!!!!

  35. }

  36.  
  37. Mystring::Mystring(const Mystring &s)

  38. {

  39.     this->m_len = s.m_len;

  40.     m_data = new char[m_len + 1];//!!!!!!!!!!!!

  41.     strcpy(this->m_data  , s.m_data);

  42. }

  43.  
  44.  
  45. istream & operator >>(istream &in,Mystring &s)//重载 >>

  46. {

  47.     char tmp[1024] = {0};

  48.     in >> tmp;

  49.     if (s.m_data != NULL)

  50.     {

  51.         delete s.m_data;

  52.     }

  53.     

  54.     s.m_len = strlen(tmp);

  55.     s.m_data = new char[s.m_len + 1];//注意+1

  56.  
  57.     strcpy(s.m_data, tmp);

  58.     return in;

  59. }

  60.  
  61. ostream & operator << (ostream &out, const Mystring &s1)//重载 <<

  62. {

  63.     out << s1.m_data;

  64.     return out;

  65. }

  66.  
  67. Mystring& Mystring::operator =(Mystring &s)//重载 >>

  68. {

  69.     m_len = s.m_len;

  70.     if (m_data != NULL)

  71.     {

  72.         delete m_data;

  73.     }

  74.  
  75.     m_data = new char[s.m_len + 1];//注意+1

  76.     strcpy(m_data, s.m_data);

  77.  
  78.     return *this;

  79. }

  80.  
  81. Mystring & Mystring::operator +=(Mystring &s)

  82. {

  83.     m_len = m_len + s.m_len;

  84.  
  85.     char *tmp = new char [m_len + 1];

  86.  
  87.     strcpy(tmp, m_data);

  88.     strcat(tmp,s.m_data);

  89.     

  90.     delete m_data;

  91.     m_data = tmp;

  92.     return *this;

  93. }

  94.  
  95. char & Mystring::operator [](int index)

  96. {

  97.     return m_data[index];

  98. }

main.cpp

 
  1. #include <iostream>

  2. #include "mystring.h"

  3.  
  4. using namespace std;

  5.  
  6. int main()

  7. {

  8. Mystring s1;

  9. Mystring s2("hello");

  10. Mystring s3(10, 'a');

  11. Mystring s4 = s2;

  12. Mystring s5(s2);

  13. cin >> s1;

  14.  
  15. cout << "s1 = " << s1 << endl;

  16. cout << "s2 = " << s2 << endl;

  17. cout << "s3 = " << s3 << endl;

  18. cout << "s4 = " << s4 << endl;

  19. cout << "s5 = " << s5 << endl;

  20. s1 += s2;

  21. cout << s1 << endl;

  22. cout << s1[0] << endl;

  23. s1[1] = '1';

  24. cout << s1 << endl;

  25.  
  26. system("pause");

  27. return 0;

  28. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值