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++)
- {
- if (j == (_countof(_data.array) - 1) || (_data.array[j + 1] != '\0'))
- {
- break;
- }
- char _new = _data.array[j + 1];
- _data.array[j + 1] = _old;
- _old = _new;
- }
- }
- 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 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;
- }
- _data.lenght = _data.lenght + _data._len;
- for (int i = _data._len; i < _data.lenght; i++)
- {
- char sym = '.';
- if (_data.array[i] == sym)
- del(_data, i, sym);
- }
- 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 = '❤';
- _data.lenght = _data.lenght + _data._len;
- insert(_data, _data.lenght, _data.marker);
- int i = _data._len - 1;
- while (_data.array[i++] != _data.marker)
- {
- char sym = '.';
- if (_data.array[i] == sym)
- del(_data, i, sym);
- }
- 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;
- }
- _data.lenght = _data.lenght + _data._len;
- for (int i = _data._len; i < _data.lenght; i++)
- {
- char sym = '.';
- if (_data.array[i] == sym)
- del(_data, i, sym);
- }
- 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 = '❤';
- _data.lenght = _data.lenght + _data._len;
- insert(_data, _data.lenght, _data.marker);
- int i = _data._len - 1;
- while (_data.array[i++] != _data.marker)
- {
- char sym = '.';
- if (_data.array[i] == sym)
- del(_data, i, sym);
- }
- 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.array[i] != '\0')
- {
- out << _data.array[i++];
- }
- break;
- }
- out << "\n";
- }
- int main()
- {
- setlocale(LC_CTYPE, "Russian");
- std::cout <<
- "Преобразовать заданную строку," << "\n" <<
- "каждую точку заменить многоточием." << "\n" <<
- "Автор : Визгунов Андрей Дмитриевич ФКТИ 7302" << "\n" <<
- "Версия : 7Б.1" << "\n";
- std::cout <<
- "[1] - Длина длина" << "\n" <<
- "[2] - Длина маркер" << "\n" <<
- "[3] - Кавычки длина" << "\n" <<
- "[4] - Кавычки маркер" << "\n";
- 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();
- input.getline(_data.array, _countof(_data.array));
- if (_data.array[0] == '\0' && input.fail())
- {
- input.clear();
- input.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- continue;
- }
- _data.lenght = -1;
- std::cout << "Enter type for [" << _data.array << "] : ";
- std::cin >> _data.type;
- 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