Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4. using namespace std;
  5.  
  6.  
  7. class Stroka
  8. {
  9. private:
  10.     int k;
  11.     char *s;
  12. public:
  13.     Stroka()
  14.     {
  15.         k = 1;
  16.         s = new char[k + 1];
  17.         s[0] = '\0';
  18.     }
  19.  
  20.  
  21.     Stroka(char *st)
  22.     {
  23.         k = 0;
  24.         while (st[k] != '\0')
  25.         {
  26.             ++k;
  27.         }
  28.         ++k;
  29.         s = new char[k + 1];
  30.         for (int i = 0; i < k; i++)
  31.         {
  32.             s[i] = st[i];
  33.         }
  34.         s[k] = '\0';
  35.     }
  36.  
  37.  
  38.     Stroka(const Stroka &smt)
  39.     {
  40.         char *ko;
  41.         k = smt.k;
  42.         s = new char[k + 1];
  43.         for (int i = 0; i < k; ++i)
  44.         {
  45.             s[i] = smt.s[i];
  46.         }
  47.         s[k] = '\0';
  48.     }
  49.  
  50.  
  51.     void input()
  52.     {
  53.         cout << s << endl;
  54.     }
  55.  
  56.  
  57.     ~ Stroka()
  58.     {
  59.         cout << "Destructor have worked!" << endl;
  60.         system("pause");
  61.         delete[] s;
  62.     }
  63.  
  64.  
  65.     operator const char*()
  66.     {
  67.         return(const char*)s;
  68.     }
  69.  
  70.  
  71.     Stroka& operator=(const Stroka& sm)
  72.     {
  73.         if (this == &sm)
  74.         {
  75.             return *this;
  76.         }
  77.         if (k != sm.k)
  78.         {
  79.             delete[] s;
  80.             s = new char[sm.k + 1];
  81.             for (int i = 0; i < sm.k; ++i)
  82.             {
  83.                 s[i] = sm.s[i];
  84.             }
  85.             s[sm.k] = '\0';
  86.         }
  87.         else
  88.             for (int i = 0; i < sm.k; ++i)
  89.             {
  90.                 s[i] = sm.s[i];
  91.             }
  92.         k = sm.k;
  93.         return *this;
  94.     }
  95.  
  96.  
  97.     Stroka& operator+=(const Stroka& mm)
  98.     {
  99.         int j, m, l = 0;
  100.    
  101.         char *t = new char[k + 1];
  102.  
  103.         for (int i = 0; i < k; ++i)
  104.         {
  105.             t[i] = s[i];
  106.         }
  107.         t[k] = '\0';
  108.         delete[] s;
  109.  
  110.         m = k;
  111.         k = k + mm.k - 1;
  112.  
  113.         s = new char[k+1];
  114.  
  115.         for (j = 0; j < m - 1; ++j)
  116.             s[j] = t[j];
  117.        
  118.         for (int i = m - 1; i < k; ++i)
  119.         {
  120.             s[i] = mm.s[l];
  121.             l++;
  122.         }
  123.         s[k] = '\0';
  124.        
  125.         delete[] t;
  126.         return *this;
  127.     }
  128.    
  129.  
  130.     friend const Stroka operator+(const Stroka& left, const Stroka& right)
  131.     {
  132.         int l = 0;
  133.         Stroka tmp("mm");
  134.  
  135.         delete[] tmp.s;
  136.         tmp.k = left.k + right.k - 1;
  137.         tmp.s = new char[tmp.k + 1];
  138.  
  139.         for (int i = 0; i < left.k - 1; ++i)
  140.             tmp.s[i] = left.s[i];
  141.  
  142.         for (int i = left.k - 1; i < tmp.k; ++i)
  143.         {
  144.             tmp.s[i] = right.s[l];
  145.             ++l;
  146.         }
  147.  
  148.         tmp.s[tmp.k] = '\0';
  149.         return tmp;
  150.     }
  151.  
  152.  
  153.     char &operator[](const int m)
  154.     {
  155.         cout << "For change" << endl;
  156.         if ((m > -1) && (m < k)) return s[m];
  157.         else
  158.         {
  159.             cout << "EROR" << endl;
  160.             system("pause");
  161.             exit(-1);
  162.         }
  163.     }
  164.        
  165.  
  166.     char operator[](const int m) const
  167.     {  
  168.         cout << "sasaa" << endl;
  169.         if ((m > -1) && (m < k)) return s[m];
  170.         else
  171.         {
  172.             cout << "EROR" << endl;
  173.             system("pause");
  174.             exit(-1);
  175.         }
  176.     }
  177.  
  178.  
  179. };
  180.  
  181.  
  182.  
  183. void main()
  184. {
  185.  
  186.  
  187.    
  188.  
  189.     system("pause");
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement