Baxram97

Untitled

Feb 13th, 2022 (edited)
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.14 KB | None | 0 0
  1. #include <iostream>
  2. #include <ostream>
  3. #include <istream>
  4. #include <cstring>
  5.  
  6. using namespace std;
  7.  
  8. class myString {
  9. private:
  10.     size_t _length = 0;
  11.     size_t _capacity = 16;
  12.     char *_text = nullptr;
  13.  
  14.     void setText(const char *text);
  15.  
  16. public:
  17.     myString() = default;
  18.  
  19.     myString(const char *text);
  20.  
  21.     myString(const myString &other);
  22.  
  23.     myString(const size_t count, const char text);
  24.  
  25.     myString &operator=(const myString &other);
  26.  
  27.     myString &operator+(const myString &other);
  28.  
  29.     myString &operator+=(const myString &other);
  30.  
  31.     bool &operator>(const myString &other);
  32.  
  33.     bool &operator<(const myString &other);
  34.  
  35.     bool &operator>=(const myString &other);
  36.  
  37.     bool &operator<=(const myString &other);
  38.  
  39.     bool operator==(const myString &other);
  40.  
  41.     char &operator[](int index) {
  42.         return _text[index];
  43.     }
  44.  
  45.     ~myString() {
  46.  
  47.         delete[] _text;
  48.     }
  49.  
  50.     friend ostream &operator<<(ostream &os, const myString &other) {
  51.         os << other._text;
  52.         return os;
  53.     }
  54.  
  55.     friend istream &operator>>(istream &in, myString &other) {
  56. //        other.clear();
  57. //        char temp;
  58. //        do {
  59. //            temp = in.get();
  60. //            if (temp == '\n' || temp == ' ') { break; }
  61. //            other.push_back(temp);
  62. //
  63. //        } while (true);
  64.         in >> other._text;
  65.         return in;
  66.     }
  67.  
  68.  
  69.     char &front();
  70.  
  71.     char &back();
  72.  
  73.     char &at(size_t index);
  74.  
  75.     size_t capacity() const;
  76.  
  77.     size_t size() const;
  78.  
  79.     size_t find(char chr) const; // Не смог
  80.  
  81.     size_t rfind(char chr) const; // Не смог…
  82.  
  83.     void clear();
  84.  
  85.     void resize(size_t newSize);
  86.  
  87.     void reserve(size_t newCapacity);
  88.  
  89.     void shrink_to_fit();
  90.  
  91.     bool empty() const;
  92.  
  93.     myString append(const char *text);
  94.  
  95.     myString &push_back(char c);
  96.  
  97.     int compare(const myString right); // Не смог
  98.  
  99.     const char *print() const { return _text; }
  100.  
  101.     void printStr() {
  102.         cout << _text;
  103.     } // сделал для себя, чтобы иногда не вводить cout…
  104. };
  105.  
  106.  
  107. myString &myString::operator=(const myString &other) {
  108.     if (this != &other) {
  109.         delete[] _text;
  110.         _text = other._text;
  111.         _length = other._length;
  112.         _capacity = other._capacity;
  113.  
  114.     }
  115.     return *this;
  116. }
  117.  
  118. myString::myString(const char *text) {
  119.     _length = strlen(text);
  120.     _capacity = _length * 2;
  121.     _text = new char[_capacity];
  122.     strcpy(_text, text);
  123. }
  124.  
  125. void myString::setText(const char *text) {
  126.     _text = new char[strlen(text) + 1];
  127.     strcpy(_text, text);
  128.  
  129. }
  130.  
  131. myString &myString::operator+(const myString &other) {
  132.     if (this != &other) {
  133.         delete[] _text;
  134.         _text = other._text;
  135.         _length = other._length;
  136.         _capacity = other._capacity;
  137.     }
  138.     return *this;
  139. }
  140.  
  141. myString &myString::operator+=(const myString &other) {
  142.     _length += other._length;
  143.  
  144.     if (other._length >= _capacity) {
  145.         _capacity = other._length * 2;
  146.         delete[] _text;
  147.         _text = new char[_capacity];
  148.     }
  149.  
  150.     strncat(_text, other._text, strlen(other._text));
  151.  
  152.     return *this;
  153. }
  154.  
  155.  
  156. bool &myString::operator>(const myString &other) {
  157.     if (this > &other) {
  158.         delete[] _text;
  159.         _text = other._text;
  160.         _length = other._length;
  161.         _capacity = other._capacity;
  162.     }
  163.     return (bool &) *this;
  164. }
  165.  
  166. char &myString::front() {
  167.     return _text[0];
  168. }
  169.  
  170. char &myString::back() {
  171.     return _text[_length - 1];
  172. }
  173.  
  174. char &myString::at(size_t index) {
  175.     if (index >= _length) {
  176.         cout << "Error! " << endl;
  177.     }
  178.     return _text[index];
  179. }
  180.  
  181. size_t myString::size() const {
  182.     return _length;
  183. }
  184.  
  185. size_t myString::capacity() const {
  186.     return _length;
  187. }
  188.  
  189. void myString::clear() {
  190.     for (int i = 0; i < _length; ++i) {
  191.         _text[i] = ' ';
  192.  
  193.     }
  194. }
  195.  
  196. void myString::resize(size_t newSize) {
  197.     char *tmp = new char[newSize + 1];
  198.  
  199.     for (int i = 0; i < newSize; ++i) {
  200.         tmp[i] = _text[i];
  201.  
  202.     }
  203.     delete[] _text;
  204.     _text = tmp;
  205.  
  206.     _length = newSize;
  207.     _capacity = _length * 2;
  208.  
  209. }
  210.  
  211. void myString::reserve(size_t newCapacity) {
  212.     char *n = new char[newCapacity + 1];
  213.     _capacity = newCapacity;
  214.     _text = n;
  215. }
  216.  
  217. bool myString::empty() const {
  218.     return _length > 0;
  219. }
  220.  
  221. myString::myString(const myString &other) {
  222.     _length = other._length;
  223.     _text = new char[_length + 1];
  224.     strcpy(_text, other._text);
  225.     cout << "Copy Constructor is called " << endl;
  226.  
  227. }
  228.  
  229. myString myString::append(const char *text) {
  230.     _length += strlen(text);
  231.  
  232.     if (_length >= _capacity) {
  233.         _capacity = _length * 2;
  234.         delete[] _text;
  235.         _text = new char[_capacity];
  236.     }
  237.  
  238.     strncat(_text, text, strlen(text));
  239.  
  240.     return *this;
  241. }
  242.  
  243. myString &myString::push_back(char c) {
  244.     char tmp[] = {c, 0};
  245.     append(tmp);
  246.     return *this;
  247. }
  248.  
  249. void myString::shrink_to_fit() {
  250.     char *str = new char[_length + 1];
  251.     for (int i = 0; i < _length; ++i) {
  252.         str[i] = _text[i];
  253.     }
  254.     delete[] _text;
  255.     _text = str;
  256. }
  257.  
  258. bool &myString::operator<(const myString &other) {
  259.     if (this < &other) {
  260.         delete[] _text;
  261.         _text = other._text;
  262.         _length = other._length;
  263.         _capacity = other._capacity;
  264.     }
  265.     return (bool &) other;
  266. }
  267.  
  268. myString::myString(const size_t count, const char text) {
  269.     _text = new char[count + 1];
  270.     for (int i = 0; i < count; ++i) {
  271.         _text[i] = text;
  272.     }
  273.     _text[count] = '\0';
  274.  
  275. }
  276.  
  277. bool myString::operator==(const myString &other) {
  278.     if (this->_text == other._text && this->_length == other._length && this->_capacity == other._capacity) {
  279.         return true;
  280.     } else {
  281.         return false;
  282.     }
  283. }
  284.  
  285. int main() {
  286.     // Надир муэллим, проверьте все, что возможно.
  287. //    cout << "\t\tCustom String Class by Bahram Bayramzade " << endl;
  288.  
  289.     // myString str = ("Bahram");
  290.     // myString str2 = str; // Copy constructor is working!
  291.     // cout << str2.print(); // Print copy…
  292. //    cout << "\n";
  293. //    cout << str.print() << endl;
  294. //    cout << str2.print();
  295. //
  296. //    cout << "\n";
  297. //    myString str3;
  298. //    str3 = "STEP ";
  299. //    str3 += "IT"; // перегпузка +=
  300. //    str3 += " Academy";
  301. //    str3.printStr();
  302. //
  303. //    cout << "\n";
  304. //    myString str4;
  305. //    str4 + "Abdullah"; // перегпузка +
  306. //    str4.printStr();
  307. //
  308. //    cout << "\n";
  309. //    myString str5;
  310. //    str5 = "Moquda";
  311. //    str5.shrink_to_fit();
  312. //    str5.printStr();
  313.  
  314. //
  315. //    myString s(5, 'a'); Работает !
  316. //    s.printStr();
  317. //
  318. //        myString indexStr("Bahram");
  319. //        cout << indexStr[3] << endl; // Работает!
  320.  
  321.  
  322. //    cout << str.at(1); //Работает!
  323. //    str.resize(4); Работает!
  324. //    cout << str;
  325. //    cout << str.size(); Работает!
  326. ////
  327. //    myString name;
  328. //    cin >> name; //не работает перегрузка cin:(
  329. //    cout << "Hello, " << name.print() << endl;
  330.  
  331. //    myString s = "Salam";
  332. //    s.reserve(10);
  333. //    cout << s.print();
  334.  
  335.  
  336.  
  337.  
  338.  
  339.     return 0;
  340. }
Add Comment
Please, Sign In to add comment