Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача на с++

Sweet Ученик (129), открыт 3 недели назад
Ctrl+X, Ctrl+V - 2
Эта задача — продолжение предыдущей задачи Ctrl+X, Ctrl+V. В качестве основы вы можете взять код оттуда.

Петя продолжает разработку своего текстового редактора. На этот раз добавилось еще одна операция:

зажать клавишу Shift (Shift).
Операции Up и Down при зажатой клавише Shift выделяют строки в текстовом редакторе. Если курсор находится на строке
n
n, то после операций Shift, Down, Down выделенными окажутся строки
n
n и
n
+
1
n+1.

Операция Ctrl+X вырезает выделенные строки из файла в буфер. Операция Ctrl+V копирует строки из буфера, заменяя выделенные строки в файле.

Операции Ctrl+X и Ctrl+V сбрасывают выделение после исполнения и отпускают клавишу Shift. Если при исполнении этих операций в файле не выделена ни одна строка, поведение должно соответствовать предыдущей задаче Ctrl+X, Ctrl+V.

Формат ввода
Программе на вход подаётся набор строк, разделённых переносом строки. Длина каждой строки не превышает 3000 символов. Последняя строка в файле является пустой. Она означает завершение ввода файла. Других пустых строк в файле быть не может.

После этого и до окончания ввода программе подаются команды Down, Up, Ctrl+X, Ctrl+V, Shift.

Формат вывода
Выведите получившийся файл построчно.
Вот мое решение,подскажите что тут не так пожалуйста
  1. #include <iostream>
    #include <deque>
    #include <string>
    using namespace std;
    int main() {
    deque<string> str;
    string o;
    while (true) {
    getline(cin, o);
    str.push_back(o);
    if (o.empty()) {
    break;
    }

    }
    size_t cursor = 0;
    string d;
    bool IsShift = false;
    size_t shift = 0;
    deque<string> shifted;
    while (getline(cin, o)) {
    if (o == "Down" && cursor < str.size() - 1) {
    if (IsShift) {
    shifted.push_back(str[cursor]);
    }
    cursor += 1;
    }
    else if (o == "Up" && cursor > 0) {
    if (IsShift) {
    shifted.push_back(str[cursor]);
    }
    cursor -= 1;
    }
    else if (o == "Ctrl+X") {
    if (IsShift) {
    IsShift = false;
    for (size_t j = shift; j != cursor; ++j) {
    str.erase(str.begin() + j);
    continue;
    }
    }
    if (!str[cursor].empty()) {
    d = str[cursor];
    str.erase(str.begin() + cursor);
    }
    }
    else if (o == "Ctrl+V") {
    if (IsShift) {
    IsShift = false;
    for (size_t j = 0; j != shifted.size(); ++j) {
    str.insert(str.begin() + cursor, shifted[j]);
    cursor += 1;
    }
    continue;
    }
    if (!d.empty()) {
    str.insert(str.begin() + cursor, d);
    cursor += 1;
    }
    }
    else if (o == "Shift") {
    if (IsShift) {
    IsShift = false;
    }
    continue;
    IsShift = true;
    shift = cursor;
    }
    }
    for (auto& fg : str) {
    cout << fg << "\n";
    }
    }
2 ответа
tired of the place? Профи (760) 3 недели назад
эм эм эм эм эм эм м эмхвызеи 0фцщ59тфц5тфцк
Sergio 2.1 Оракул (67281) 3 недели назад
 https://pastebin.com/tAVTQauy 
SweetУченик (129) 3 недели назад
Этот код не работает
Похожие вопросы