fork download
  1. #include<iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. class MyString
  7. {
  8. private:
  9. size_t length;
  10. char *str;
  11.  
  12. public:
  13. MyString ();
  14. MyString (const char *c);
  15. MyString (const MyString& t);
  16. ~MyString ();
  17.  
  18. MyString& operator= (const MyString& t);
  19. MyString& operator= (const char *c);
  20. MyString operator+ (const MyString& t) const;
  21. MyString& operator+= (const MyString& t);
  22. char& operator[] (size_t i);
  23. const char& operator[] (size_t i) const;
  24.  
  25. char& at (size_t i);
  26. const char& at (size_t i) const;
  27. void get_input (std::istream& in);
  28. size_t get_length () const;
  29. void from_c_str (const char *other);
  30.  
  31. friend std::ostream& operator<< (std::ostream& out, const MyString& t);
  32. friend std::istream& operator>> (std::istream& in, MyString& t);
  33. friend bool operator== (const MyString& t, char *c);
  34. friend bool operator== (const MyString& t, const MyString& t1);
  35. friend bool operator!= (const MyString& t, char *c);
  36. friend bool operator!= (const MyString& t, const MyString& t1);
  37. };
  38.  
  39. MyString::MyString ()
  40. {
  41. length = 1;
  42. str = '\0';
  43. }
  44.  
  45. MyString::MyString (const char *c)
  46. {
  47. from_c_str (c);
  48. }
  49.  
  50. MyString::MyString (const MyString& t)
  51. {
  52. from_c_str (t.str);
  53. }
  54.  
  55. MyString::~MyString ()
  56. {
  57. delete[] str;
  58. }
  59.  
  60. MyString& MyString::operator= (const MyString& t)
  61. {
  62. from_c_str (t.str);
  63.  
  64. return *this;
  65. }
  66.  
  67. MyString& MyString::operator= (const char *c)
  68. {
  69. from_c_str (c);
  70.  
  71. return *this;
  72. }
  73.  
  74. MyString MyString::operator+ (const MyString& t) const
  75. {
  76. return (MyString(str) += t.str);
  77. }
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86. bool operator== (const MyString& t, char *c)
  87. {
  88. return (strcmp(t.str, c) == 0);
  89. }
  90.  
  91. bool operator== (const MyString& t, const MyString& t1)
  92. {
  93. return (strcmp(t.str, t1.str) == 0);
  94. }
  95.  
  96. bool operator!= (const MyString& t, char *c)
  97. {
  98. return !(operator== (t, c));
  99. }
  100.  
  101. bool operator!= (const MyString& t, const MyString& t1)
  102. {
  103. return !(operator== (t, t1.str));
  104. }
  105.  
  106. MyString& MyString::operator+= (const MyString& t)
  107. {
  108. length = strlen (str) + strlen (t.str) + 1;
  109. char *newStr = new char[length];
  110. strcpy (newStr, str);
  111. strcat (newStr, t.str);
  112. strcpy (str, newStr);
  113. str[length-1] = '\0';
  114. delete[] newStr;
  115.  
  116. return *this;
  117. }
  118.  
  119. char& MyString::operator[] (size_t i)
  120. {
  121. return str[i];
  122. }
  123.  
  124. const char& MyString::operator[] (size_t i) const
  125. {
  126. return str[i];
  127. }
  128.  
  129. void MyString::get_input (std::istream& in)
  130. {
  131. while (true)
  132. {
  133. char c = in.get ();
  134.  
  135. if (c == '\n')
  136. {
  137. break;
  138. }
  139.  
  140. if (length == 0)
  141. {
  142. length = 2;
  143. }
  144. else
  145. {
  146. ++length;
  147. }
  148.  
  149. char* newStr = new char[length];
  150. if (str != NULL)
  151. {
  152. strcpy (newStr, str);
  153. }
  154. newStr[length-2] = c;
  155. newStr[length-1] = '\0';
  156.  
  157. delete[] str;
  158.  
  159. str = newStr;
  160. }
  161. }
  162.  
  163. size_t MyString::get_length () const
  164. {
  165. return (length - 1);
  166. }
  167.  
  168. void MyString::from_c_str (const char *c)
  169. {
  170. length = strlen (c) + 1;
  171. str = new char[length];
  172. strcpy (str, c);
  173. }
  174.  
  175. std::ostream& operator<< (std::ostream& out, const MyString& t)
  176. {
  177. out << t.str;
  178. return out;
  179. }
  180.  
  181. std::istream& operator>> (std::istream& in, MyString& t)
  182. {
  183. t.get_input (in);
  184. return in;
  185. }
  186.  
  187. int main()
  188. {
  189. MyString st;
  190. MyString zt;
  191. MyString tt;
  192. cin >> st;
  193. cout << st<<endl;
  194. cin >> zt;
  195. cout <<zt<<endl;
  196.  
  197. tt = st += zt;
  198. cout << tt;
  199. system("pause");
  200. return 0;
  201. }
  202.  
Success #stdin #stdout #stderr 0s 4392KB
stdin
first
second
stdout
first
second
firstsecond
stderr
sh: 1: pause: not found