Advertisement
Hamikadze

Untitled

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