Advertisement
Solingen

Untitled

Oct 14th, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. class String
  6. {
  7. public:
  8.     char* str;
  9.     int len;
  10.  
  11.     String(const char* s, int length)
  12.     {
  13.         len = length;
  14.         str = new char[len + 1];
  15.         strncpy(str, s, len);
  16.         str[len] = '\0';
  17.     }
  18.  
  19.     String() : len{0}
  20.     {
  21.         str = new char[1];
  22.         str[0] = '\0';
  23.     }
  24.  
  25.     String(const char* s)
  26.     {
  27.         len = strlen(s);
  28.         str = new char[len + 1];
  29.         strcpy(str, s);
  30.     }
  31.  
  32.     String(const String& other)
  33.     {
  34.         len = other.len;
  35.         str = new char[len + 1];
  36.         strcpy(str, other.str);
  37.     }
  38.  
  39.     ~String()
  40.     {
  41.         delete[] str;
  42.         str = nullptr;
  43.     }
  44.  
  45.     String& operator=(const String& other)
  46.     {
  47.         if (this == &other)
  48.             return *this;
  49.  
  50.         delete[] str;
  51.         len = other.len;
  52.         str = new char[len + 1];
  53.         strcpy(str, other.str);
  54.         return *this;
  55.     }
  56.  
  57.     friend String operator+(const String& s1, const String& s2)
  58.     {
  59.         String result;
  60.         result.len = s1.len + s2.len;
  61.         result.str = new char[result.len + 1];
  62.         strcpy(result.str, s1.str);
  63.         strcat(result.str, s2.str);
  64.         return result;
  65.     }
  66.  
  67.     friend bool operator==(const String& s1, const String& s2)
  68.     {
  69.         return strcmp(s1.str, s2.str) == 0;
  70.     }
  71.  
  72.     friend bool operator!=(const String& s1, const String& s2)
  73.     {
  74.         return !(s1 == s2);
  75.     }
  76.  
  77.     char& operator[](int index)
  78.     {
  79.         return str[index];
  80.     }
  81.  
  82.     int length() const
  83.     {
  84.         return len;
  85.     }
  86.  
  87.     int index(const String& subst, int start=0)
  88.     {
  89.         if (start < 0 || start >= len)
  90.         {
  91.             return -1;
  92.         }
  93.  
  94.         const char* found = strstr(str + start, subst.str);
  95.         if (found == nullptr)
  96.         {
  97.             return -1;
  98.         }
  99.  
  100.         return found - str;
  101.     }
  102.  
  103.     friend std::istream& operator>>(std::istream& in, String& s)
  104.     {
  105.         char* buffer = new char;
  106.         in >> buffer;
  107.         s = String(buffer);
  108.         delete buffer;
  109.         return in;
  110.     }
  111.  
  112.     friend std::ostream& operator<<(std::ostream& out, const String& s)
  113.     {
  114.         if (s.str == nullptr)
  115.         {
  116.             return out;
  117.         }
  118.         out << s.str;
  119.         return out;
  120.     }
  121. };
  122.  
  123. void getString(String& s) {
  124.     char c = getchar();
  125.     String result;
  126.     while (c != '\n') {
  127.         result = result + String(&c, 1);
  128.         c = getchar();
  129.     }
  130.     s = result;
  131. }
  132.  
  133. int main() {
  134.     while (true) {
  135.         String s1, s2;
  136.         std::cout <<"Введите первую строку: ";
  137.         getString(s1);
  138.  
  139.         if (s1.length() == 0)
  140.             break;
  141.  
  142.         std::cout <<"Введите вторую строку: ";
  143.         getString(s2);
  144.  
  145.         int start = 0;
  146.         String result;
  147.         while (start < s1.length())
  148.         {
  149.             int idx = s1.index(s2, start);
  150.             if (idx == -1)
  151.             {
  152.                 result = result + String(s1.str + start);
  153.                 break;
  154.             }
  155.             result = result + String(s1.str + start, idx - start);
  156.             result = result + String("<") + s2 + String(">");
  157.             start = idx + s2.length();  
  158.         }
  159.         std::cout << "Результат: " << result << std::endl;
  160.     }
  161.  
  162.     return 0;
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement