Advertisement
Week045

String

Oct 20th, 2022
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1.     #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. class String {
  8. private:
  9.     char* st;
  10.     int size;
  11. public:
  12.     String();
  13.     String(const char* s);
  14.     String(const String&);
  15.     ~String();
  16.     void dislpay() const;
  17.     void get();
  18.     int lenght();
  19.     String& operator=(const String&);
  20.     friend String operator+(const String&, const String&);
  21.     String& operator+=(const String&);
  22.     bool operator==(const String&) const;
  23.     bool operator!=(const String&) const;
  24.     char& operator[](int);
  25.     void operator()(int, int) const;  
  26.     friend istream& operator>>(istream&, String&);
  27.     friend ostream& operator<<(ostream&, String&);
  28. };
  29.  
  30. String::String() {
  31.     this->size = 1;
  32.     st = new char[this->size];
  33.     st[0] = '\0';
  34.     cout << "Был вызван конструктор: " << this << endl;
  35. }
  36. String::String(const char* s) {
  37.     this->size = strlen(s) + 1;
  38.     st = new char[this->size];
  39.     strcpy(st, s);
  40.     cout << "Был вызван конструктор: " << this << endl;
  41. }
  42. String::String(const String& other) {
  43.     this->size = other.size + 1;
  44.     this->st = new char[this->size];
  45.     strcpy(this->st, other.st);
  46.     cout << "Был вызван конструктор копирования: " << this << endl;
  47. }
  48. String::~String() {
  49.     delete[] st;
  50.     cout << "Был вызван деструктор: " << this << endl;
  51. }
  52. void String::dislpay() const {
  53.     cout << "Строка: " << st << endl;
  54. }
  55. void String::get() {
  56.     st = new char[80];
  57.     cout << "Напишите строку: ";
  58.     cin.getline(st, 80);
  59.     int new_size = strlen(st) + 1;
  60.     char* new_st = new char[new_size];
  61.     strcpy(new_st, st);
  62.     delete[] st;
  63.     st = new_st;
  64.     size = new_size;
  65. }
  66. int String::lenght() {
  67.     return strlen(st);
  68. }
  69. String operator+(const String& s1, const String& s2) {
  70.     String temp = s1;
  71.     int new_size = s1.size + s2.size - 1;
  72.     char* new_st = new char[new_size];
  73.     strcpy(new_st, temp.st);
  74.     delete[] temp.st;
  75.     temp.st = new_st;
  76.     strcat(temp.st, s2.st);
  77.     temp.size = new_size;
  78.     return temp;
  79. }
  80. String& String::operator=(const String& s) {
  81.     delete[] st;
  82.     st = new char[s.size];
  83.     strcpy(st, s.st);
  84.     size = s.size;
  85.     return *this;
  86. }
  87. String& String::operator+=(const String& s) {
  88.     int new_size = size + s.size;
  89.     if (new_size >= size) {
  90.         char* new_st = new char[new_size - 1];
  91.         strcpy(new_st, st);
  92.         delete[] st;
  93.         st = new_st;
  94.     }
  95.     strcat(st, s.st);
  96.     size = new_size - 1;
  97.     return *this;
  98. }
  99. bool String::operator==(const String& s) const {
  100.     if (!strcmp(st, s.st))
  101.         return true;
  102.     else return false;
  103. }
  104. bool String::operator!=(const String& s) const {
  105.     if(!strcmp(st, s.st))
  106.         return false;
  107.     return true;
  108. }
  109. char& String::operator[](int index) {
  110.     if (index >= size) {
  111.         cout << "Ошибка!" << endl;
  112.         exit(1);
  113.     }
  114.     return *(st + index);
  115. }
  116. void String::operator()(int start, int end) const {
  117.     if (start < 0 || end >= size) {
  118.         cout << "Ошибка!" << endl;
  119.         exit(1);
  120.     }
  121.     cout << "Символы: ";
  122.     for (int i = start; i <= end; i++)
  123.         cout << *(st + i);
  124.     cout << endl;
  125. }
  126. istream& operator>>(istream& in, String& s) {//################DON'T WORKED#######################
  127.     return in >> s.st;
  128. }
  129. ostream& operator<<(ostream& out, String& s) {
  130.     return out << s.st;
  131. }
  132.  
  133. int main() {
  134.     setlocale(LC_ALL, "Russian");
  135.     String st1 = "Hello, ";
  136.     String st2 = "World!";
  137.     String st3;
  138.  
  139.     //st3 = "Hello, " + st2;
  140.     //cout << st3 << endl;
  141.  
  142.     st3 = st1 + st2;
  143.     cout << st3 << endl;
  144.  
  145.     return 0;
  146. }
  147.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement