Advertisement
Hamikadze

Untitled

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