Advertisement
Hamikadze

Untitled

Feb 15th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.45 KB | None | 0 0
  1. // PROG.1.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <fstream>
  6. #include <iostream>
  7.  
  8. struct data
  9. {
  10.     int type;
  11.     char marker;
  12.     int lenght;
  13.     int _len;
  14.     char array[1024];
  15. };
  16.  
  17. void insert(data &_data, int index, char sym)
  18. {
  19.     char _old = _data.array[index];
  20.     _data.array[index] = sym;
  21.     for (int j = index; j < _countof(_data.array) - 1; j++)
  22.     {
  23.         char _new = _data.array[j + 1];
  24.         _data.array[j + 1] = _old;
  25.         _old = _new;
  26.     }
  27.     _data.array[index] = sym;
  28. }
  29.  
  30. void del(data &_data, int index, char sym)
  31. {
  32.     while (_data.array[index + 1] == sym)
  33.     {
  34.         for (int i = index + 1; i < _countof(_data.array) - 2; i++)
  35.         {
  36.             _data.array[i] = _data.array[i + 1];
  37.         }
  38.             _data.lenght--;
  39.     }
  40. }
  41.  
  42. bool work(data &_data, int &index)
  43. {
  44.     for (int i = 0; i < 2; i++)
  45.     {
  46.         del(_data, index, '.');
  47.     }
  48.     return true;
  49. }
  50.  
  51. bool mode_lenght_def(data &_data, std::ifstream &in)
  52. {
  53.     if (sscanf_s(_data.array, "%d %n", &_data.lenght, &_data._len) != 1)
  54.     {
  55.         char error[] = "Incorrect format";
  56.         strcpy_s(_data.array, error);
  57.         _data.lenght = _countof(error) - 1;
  58.         _data._len = 0;
  59.         return false;
  60.     }
  61.     for (int i = _data._len; i < _data.lenght + _data._len; i++)
  62.     {
  63.         if (_data.array[i] == '.')
  64.         {
  65.             work(_data, i);
  66.         }
  67.     }
  68.     _data.lenght = _data.lenght + _data._len;
  69.     return true;
  70. }
  71.  
  72. bool mode_lenght_mark(data &_data, std::ifstream &in)
  73. {
  74.     if (sscanf_s(_data.array, "%d %n", &_data.lenght, &_data._len) != 1)
  75.     {
  76.         char error[] = "Incorrect format";
  77.         strcpy_s(_data.array, error);
  78.         _data.lenght = _countof(error) - 1;
  79.         _data._len = 0;
  80.         return false;
  81.     }
  82.     _data.marker = '❤';
  83.     insert(_data, _data.lenght + _data._len, _data.marker);
  84.     int i = _data._len - 1;
  85.     while (_data.array[i++] != _data.marker)
  86.     {
  87.         if (_data.array[i] == '.')
  88.             work(_data, i);
  89.     }
  90.     _data.lenght = _data.lenght + _data._len;
  91.     return true;
  92. }
  93.  
  94. bool mode_marker_def(data &_data, std::ifstream &in)
  95. {
  96.     _data._len = 1;
  97.     _data.marker = _data.array[0];
  98.     for (int i = _data._len; i < _countof(_data.array) - 1; i++)
  99.     {
  100.         if (_data.array[i + 1] == _data.marker)
  101.         {
  102.             _data.lenght = i;
  103.         }
  104.     }
  105.     if (_data.lenght == -1)
  106.     {
  107.         char error[] = "Missing closing quote";
  108.         strcpy_s(_data.array, error);
  109.         _data.lenght = _countof(error) - 1;
  110.         _data._len = 0;
  111.         return false;
  112.     }
  113.  
  114.     for (int i = _data._len; i < _data._len + _data.lenght; i++)
  115.     {
  116.         if (_data.array[i] == '.')
  117.         {
  118.             work(_data, i);
  119.         }
  120.     }
  121.     _data.lenght = _data.lenght + _data._len;
  122.     return true;
  123. }
  124.  
  125. bool mode_marker_mark(data &_data, std::ifstream &in)
  126. {
  127.     _data._len = 1;
  128.     _data.marker = _data.array[0];
  129.     for (int i = _data._len; i < _countof(_data.array) - 1; i++)
  130.     {
  131.         if (_data.array[i + 1] == _data.marker)
  132.         {
  133.             _data.lenght = i;
  134.         }
  135.     }
  136.     if (_data.lenght == -1)
  137.     {
  138.         char error[] = "Missing closing quote";
  139.         strcpy_s(_data.array, error);
  140.         _data.lenght = _countof(error) - 1;
  141.         _data._len = 0;
  142.         return false;
  143.     }
  144.  
  145.     _data.marker = '❤';
  146.     insert(_data, _data.lenght + _data._len, _data.marker);
  147.     int i = _data._len - 1;
  148.     while (_data.array[i++] != _data.marker)
  149.     {
  150.         if (_data.array[i] == '.')
  151.             work(_data, i);
  152.     }
  153.     _data.lenght = _data.lenght + _data._len;
  154.     return true;
  155. }
  156.  
  157. void print(data &_data, std::ofstream &out)
  158. {
  159.     out << "Result for [" << _data.type << "] type : ";
  160.     switch (_data.type)
  161.     {
  162.     case 1:
  163.     case 3:
  164.         for (int i = _data._len; i < _data.lenght && _data.array[i] != '\0'; i++)
  165.             out << _data.array[i];
  166.         break;
  167.     case 2:
  168.     case 4:
  169.         int i = _data._len;
  170.         while (_data.array[i] != _data.marker && i < _data.lenght + _data._len && _data.array[i] != '\0')
  171.         {
  172.             out << _data.array[i++];
  173.         }
  174.         break;
  175.     }
  176.     out << "\n";
  177. }
  178.  
  179. int main()
  180. {
  181.     std::ifstream input("input.txt");
  182.     std::ofstream output("output.txt");
  183.  
  184.     if (!input || !output) {
  185.         std::cout << "Unable to work with files";
  186.         system("pause");
  187.         return 0;
  188.     }
  189.  
  190.     while (!input.eof())
  191.     {
  192.         data _data = data();
  193.         _data.lenght = -1;
  194.         std::cout << "Enter type : ";
  195.         std::cin >> _data.type;
  196.  
  197.         input.getline(_data.array, _countof(_data.array));
  198.         switch (_data.type)
  199.         {
  200.         case 1://длинна
  201.             mode_lenght_def(_data, input);
  202.             break;
  203.         case 2://длинна маркер
  204.             mode_lenght_mark(_data, input);
  205.             break;
  206.         case 3://маркер кавычки
  207.             mode_marker_def(_data, input);
  208.             break;
  209.         case 4://маркер длинна
  210.             mode_marker_mark(_data, input);
  211.             break;
  212.         }
  213.         print(_data, output);
  214.     }
  215.     system("pause");
  216.     return 0;
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement