Vladislav_Bezruk

Untitled

Dec 8th, 2021 (edited)
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. //кінець рядка
  4. #define END_LINE '\0'
  5.  
  6. using namespace std;
  7.  
  8. class MyString {
  9.     private:
  10.         //покажчик на початок рядка
  11.         char* s;
  12.    
  13.     public:
  14.         //конструктор за замовчуванням
  15.         MyString() {
  16.             s = new char[1];
  17.             s[0] = END_LINE;
  18.         }
  19.        
  20.         //конструктор, що приймає у якості параметру значення n
  21.         MyString(int n) {
  22.             s = new char[n + 1];
  23.             s[n] = END_LINE;
  24.         }
  25.        
  26.         //конструктор, що приймає у якості параметру рядок
  27.         MyString(char* s) {
  28.             int len = 0;
  29.            
  30.             while (s[len] != END_LINE)
  31.                 len++;
  32.                
  33.             this->s = new char[len + 1];
  34.            
  35.             for (int i = 0; i < len; i++)
  36.                 this->s[i] = s[i];
  37.             this->s[len] = END_LINE;
  38.         }
  39.        
  40.         //деструктор
  41.         ~MyString() {
  42.             delete[] s;
  43.         }
  44.        
  45.         //метод, що визначає довжину рядка
  46.         int getLength() {
  47.             int len = 0;
  48.            
  49.             while (s[len] != END_LINE)
  50.                 len++;
  51.                
  52.             return len;
  53.         }
  54.        
  55.         //метод, що визначає чи рядок пустий
  56.         bool isEmpty() {
  57.             return s[0] == END_LINE;
  58.         }
  59.        
  60.         //оператор + або конкатенація рядків
  61.         MyString operator + (MyString &x) {
  62.             int a_len = getLength();
  63.             int b_len = x.getLength();
  64.             int res_len = a_len + b_len;
  65.                
  66.             MyString res_string(res_len + 1);
  67.            
  68.             for (int i = 0; i < res_len; i++) {
  69.                 if (i < a_len)
  70.                     res_string.s[i] = s[i];
  71.                 else
  72.                     res_string.s[i] = x.s[i - a_len];
  73.             }
  74.             res_string.s[res_len] = END_LINE;
  75.             return res_string;
  76.         }
  77.        
  78.         //оператор = або присвоєння
  79.         MyString& operator = (MyString x) {
  80.             int len = 0;
  81.            
  82.             while (x.s[len] != END_LINE)
  83.                 len++;
  84.                
  85.             s = new char[len + 1];
  86.            
  87.             for (int i = 0; i < len; i++)
  88.                 s[i] = x.s[i];
  89.             s[len] = END_LINE;
  90.            
  91.             return *this;
  92.         }
  93.        
  94.         //дружній оператор введення рядка
  95.         friend istream& operator >> (istream& is, MyString& x);
  96.        
  97.         //дружній оператор виведення рядка
  98.         friend ostream& operator << (ostream& os, MyString& x);
  99. };
  100.  
  101. //оператор введення рядка
  102. istream& operator >> (istream& is, MyString& x) {
  103.     is >> x.s;
  104.    
  105.     return is;
  106. }
  107.  
  108. //оператор виведення рядка
  109. ostream& operator << (ostream& os, MyString& x) {
  110.     os << x.s;
  111.    
  112.     return os;
  113. }
  114.  
  115. int main() {
  116.    
  117.     MyString a, b, c;
  118.    
  119.     //перевірка оператора введення
  120.     cout << "Enter a: ";
  121.     cin >> a;
  122.     cout << "Enter b: ";
  123.     cin >> b;
  124.    
  125.     //перевірка оператора +
  126.     cout << endl << "a + b = ";
  127.     c = a + b;
  128.    
  129.     //перевірка оператора виведення
  130.     cout << c << endl;
  131.    
  132.     //перевірка методу, що визначає довжину рядка
  133.     cout << endl << "length of a = " << a.getLength() << endl;
  134.     cout << "length of b = " << b.getLength() << endl;
  135.     cout << "length of a + b = " << c.getLength() << endl;
  136.    
  137.     //перевірка оператора =
  138.     cout << endl << "Operator = test:" << endl;
  139.     a = "Hello world!";
  140.     cout << a << endl;
  141.    
  142.     //перевірка конструктора який приймає рядок
  143.     cout << endl << "Constructor (*char) test:" << endl;
  144.     MyString d("Hello world!");
  145.     cout << d << endl;
  146.     cout << endl;
  147.    
  148.     return 0;
  149. }
Add Comment
Please, Sign In to add comment