Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // PROG.1.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <fstream>
- #include <iostream>
- struct data
- {
- int type;
- char marker;
- int lenght;
- int _len;
- char array[1024];
- };
- void insert(data &_data, int index, char sym)
- {
- char _old = _data.array[index];
- _data.array[index] = sym;
- for (int j = index; j < _countof(_data.array) - 1; j++)
- {
- char _new = _data.array[j + 1];
- _data.array[j + 1] = _old;
- _old = _new;
- }
- _data.array[index] = sym;
- }
- void del(data &_data, int index, char sym)
- {
- while (_data.array[index + 1] == sym)
- {
- for (int i = index + 1; i < _countof(_data.array) - 2; i++)
- {
- _data.array[i] = _data.array[i + 1];
- }
- _data.lenght--;
- }
- }
- bool work(data &_data, int &index)
- {
- for (int i = 0; i < 2; i++)
- {
- del(_data, index, '.');
- }
- return true;
- }
- bool mode_lenght_def(data &_data, std::ifstream &in)
- {
- if (sscanf_s(_data.array, "%d %n", &_data.lenght, &_data._len) != 1)
- {
- char error[] = "Incorrect format";
- strcpy_s(_data.array, error);
- _data.lenght = _countof(error) - 1;
- _data._len = 0;
- return false;
- }
- for (int i = _data._len; i < _data.lenght + _data._len; i++)
- {
- if (_data.array[i] == '.')
- {
- work(_data, i);
- }
- }
- _data.lenght = _data.lenght + _data._len;
- return true;
- }
- bool mode_lenght_mark(data &_data, std::ifstream &in)
- {
- if (sscanf_s(_data.array, "%d %n", &_data.lenght, &_data._len) != 1)
- {
- char error[] = "Incorrect format";
- strcpy_s(_data.array, error);
- _data.lenght = _countof(error) - 1;
- _data._len = 0;
- return false;
- }
- _data.marker = '❤';
- insert(_data, _data.lenght + _data._len, _data.marker);
- int i = _data._len - 1;
- while (_data.array[i++] != _data.marker)
- {
- if (_data.array[i] == '.')
- work(_data, i);
- }
- _data.lenght = _data.lenght + _data._len;
- return true;
- }
- bool mode_marker_def(data &_data, std::ifstream &in)
- {
- _data._len = 1;
- _data.marker = _data.array[0];
- for (int i = _data._len; i < _countof(_data.array) - 1; i++)
- {
- if (_data.array[i + 1] == _data.marker)
- {
- _data.lenght = i;
- }
- }
- if (_data.lenght == -1)
- {
- char error[] = "Missing closing quote";
- strcpy_s(_data.array, error);
- _data.lenght = _countof(error) - 1;
- _data._len = 0;
- return false;
- }
- for (int i = _data._len; i < _data._len + _data.lenght; i++)
- {
- if (_data.array[i] == '.')
- {
- work(_data, i);
- }
- }
- _data.lenght = _data.lenght + _data._len;
- return true;
- }
- bool mode_marker_mark(data &_data, std::ifstream &in)
- {
- _data._len = 1;
- _data.marker = _data.array[0];
- for (int i = _data._len; i < _countof(_data.array) - 1; i++)
- {
- if (_data.array[i + 1] == _data.marker)
- {
- _data.lenght = i;
- }
- }
- if (_data.lenght == -1)
- {
- char error[] = "Missing closing quote";
- strcpy_s(_data.array, error);
- _data.lenght = _countof(error) - 1;
- _data._len = 0;
- return false;
- }
- _data.marker = '❤';
- insert(_data, _data.lenght + _data._len, _data.marker);
- int i = _data._len - 1;
- while (_data.array[i++] != _data.marker)
- {
- if (_data.array[i] == '.')
- work(_data, i);
- }
- _data.lenght = _data.lenght + _data._len;
- return true;
- }
- void print(data &_data, std::ofstream &out)
- {
- out << "Result for [" << _data.type << "] type : ";
- switch (_data.type)
- {
- case 1:
- case 3:
- for (int i = _data._len; i < _data.lenght && _data.array[i] != '\0'; i++)
- out << _data.array[i];
- break;
- case 2:
- case 4:
- int i = _data._len;
- while (_data.array[i] != _data.marker && i < _data.lenght + _data._len && _data.array[i] != '\0')
- {
- out << _data.array[i++];
- }
- break;
- }
- out << "\n";
- }
- int main()
- {
- std::ifstream input("input.txt");
- std::ofstream output("output.txt");
- if (!input || !output) {
- std::cout << "Unable to work with files";
- system("pause");
- return 0;
- }
- while (!input.eof())
- {
- data _data = data();
- _data.lenght = -1;
- std::cout << "Enter type : ";
- std::cin >> _data.type;
- input.getline(_data.array, _countof(_data.array));
- switch (_data.type)
- {
- case 1://длинна
- mode_lenght_def(_data, input);
- break;
- case 2://длинна маркер
- mode_lenght_mark(_data, input);
- break;
- case 3://маркер кавычки
- mode_marker_def(_data, input);
- break;
- case 4://маркер длинна
- mode_marker_mark(_data, input);
- break;
- }
- print(_data, output);
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement