Advertisement
Neveles

String.cpp

Dec 3rd, 2019
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.46 KB | None | 0 0
  1. #include "String.h"
  2.  
  3. // конструкторы, деструктор
  4. String::String()
  5. {
  6.     string_ = nullptr;
  7.     length_ = 0;
  8. }
  9. String::String(const char* string)
  10. {
  11.     length_ = strlen(string);
  12.     string_ = new char[length_ + 1];
  13.  
  14.     for (int i = 0; i < length_ + 1; i++)
  15.     {
  16.         string_[i] = string[i];
  17.     }
  18. }
  19. String::String(const String& string)
  20. {
  21.     length_ = string.length_;
  22.     string_ = new char[length_ + 1];
  23.  
  24.     for (int i = 0; i < length_ + 1; i++)
  25.     {
  26.         string_[i] = string.string_[i];
  27.     }
  28. }
  29. String::~String()
  30. {
  31.     delete[] string_;
  32. }
  33.  
  34. // перегрузка присваивания и конкатенации
  35. String& String::operator=(const String& string)
  36. {
  37.     if (length_ != string.length_) {
  38.         length_ = string.length_;
  39.         delete[] string_;
  40.         string_ = new char[length_ + 1];
  41.     }
  42.     strcpy_s(string_, length_ + 1, string.string_);
  43.     return *this;
  44.  
  45.     //if (string_ != nullptr)
  46.     //{
  47.     //  delete[] string_;
  48.     //}
  49.     //length_ = string.length_;
  50.     //string_ = new char[length_ + 1];
  51.     //for (int i = 0; i < length_ + 1; i++)
  52.     //{
  53.     //  string_[i] = string[i];
  54.     //}
  55.  
  56.     //return *this;
  57. }
  58. String String::operator+ (const String& string)
  59. {
  60.     String newStr;
  61.  
  62.     newStr.length_ = length_ + string.length_;
  63.     newStr.string_ = new char[length_ + string.length_ + 1];
  64.  
  65.     int i = 0;
  66.     for (; i < length_; i++)
  67.     {
  68.         newStr.string_[i] = string_[i];
  69.     }
  70.     for (int j = 0; j < string.length_; j++, i++)
  71.     {
  72.         newStr.string_[i] = string.string_[j];
  73.     }
  74.     newStr.string_[length_ + string.length_] = '\0';
  75.  
  76.     return newStr;
  77. }
  78.  
  79. //String& String::operator+= (const char& symbol)
  80. //{
  81. //  string_[length_] = symbol;
  82. //  ++length_;
  83. //  string_[length_] = '\0';
  84. //  return *this;
  85. //}
  86.  
  87. // перегрузка операторов сравнения
  88. bool String::operator== (const String& string)
  89. {
  90.     if (length_ != string.length_)
  91.     {
  92.         return false;
  93.     }
  94.  
  95.     for (int i = 0; i < length_; i++)
  96.     {
  97.         if (string_[i] != string.string_[i])
  98.         {
  99.             return false;
  100.         }
  101.     }
  102.     return true;
  103. }
  104. bool String::operator!= (const String& string)
  105. {
  106.     return !(this->operator== (string));
  107. }
  108. bool String::operator> (const String& string)
  109. {
  110.     return (length_ > string.length_);
  111. }
  112. bool String::operator< (const String& string)
  113. {
  114.     return (length_ < string.length_);
  115. }
  116. bool String::operator>= (const String& string)
  117. {
  118.     return !(this->operator< (string));
  119. }
  120. bool String::operator<= (const String& string)
  121. {
  122.     return !(this->operator> (string));
  123. }
  124.  
  125. // перегрузка оператора индексирования
  126. char& String::operator[] (int index)
  127. {
  128.     if (index < 0 || index > length_)
  129.     {
  130.         throw "ERROR: String borders violation!";
  131.     }
  132.     return string_[index];
  133. }
  134.  
  135. // перегрузка ввода/вывода, как дружественные функции
  136. ostream& operator<< (ostream& out, const String& string)
  137. {
  138.     return (out << string.string_);
  139. }
  140. istream& operator>> (istream& in, String& string)
  141. {
  142.     char* tempStr = new char[255];
  143.     in.getline(tempStr, sizeof tempStr);
  144.     string = tempStr;
  145.     delete[] tempStr;
  146.  
  147.     return in;
  148.  
  149.     //char* str = new char[255];
  150.     //in >> str;
  151.  
  152.     //string.length_ = calculateLength(str);
  153.     //if (string.string_ != nullptr)
  154.     //{
  155.     //  delete[] string.string_;
  156.     //}
  157.     //string.string_ = new char[string.length_ + 1];
  158.  
  159.     //for (int i = 0; i < string.length_ + 1; i++)
  160.     //{
  161.     //  string.string_[i] = str[i];
  162.     //}
  163.  
  164.     //delete[] str;
  165.  
  166.     //return in;
  167. }
  168.  
  169. int String::getLength(const char* str) const
  170. {
  171.     int i;
  172.     for (i = 0; str[i] != '\0'; i++) {}
  173.     return i;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement