Advertisement
Solingen

function for reading numbers

Oct 14th, 2024
9
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.58 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.         if (start < 0 || start >= len){
  89.             return -1;
  90.         }
  91.  
  92.         const char* found = strstr(str + start, subst.str);
  93.         /*
  94.         Функция ищет первое вхождение подстроки string2 в строке string1.
  95.         Возвращает указатель на первое вхождение строки string2   в строку string1, или пустой указатель, если строка string2 не является частью строки string1.
  96.         В данном поиске нуль-символ не  учитывается.
  97.         */
  98.         if (found == nullptr){
  99.             return -1;
  100.         }
  101.  
  102.     return found - str;
  103.     }
  104.  
  105.     friend std::istream& operator>>(std::istream& in, String& s)
  106.     {
  107.         char* buffer = new char;
  108.         in >> buffer;
  109.         s = String(buffer);
  110.         delete buffer;
  111.         return in;
  112.     }
  113.  
  114.     friend std::ostream& operator<<(std::ostream& out, const String& s)
  115.     {
  116.         if (s.str == nullptr)
  117.         {
  118.             return out;
  119.         }
  120.         out << s.str;
  121.         return out;
  122.     }
  123. };
  124.  
  125. int main(){
  126.     while(1)
  127.     {
  128.         String s1, s2;
  129.         std::cout <<"Введите первую строку: ";
  130.         std::cin >> s1;
  131.  
  132.         std::cout <<"Введите вторую строку: ";
  133.         std::cin >> s2;
  134.  
  135.         int start = 0;
  136.         String result;
  137.         while (start < s1.length())
  138.         {
  139.             int idx = s1.index(s2, start);
  140.             if (idx == -1)
  141.             {
  142.                 result = result + String(s1.str + start);
  143.                 break;
  144.             }
  145.             result = result + String(s1.str + start, idx - start);
  146.             result = result + String("<") + s2 + String(">");
  147.             start = idx + s2.length();
  148.         }
  149.         std::cout << "Результат: " << result << std::endl;
  150.     }
  151. }
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement