Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Задача на С++ обработка строк

Немногие знают, что первые версии текстового редактора из предыдущей задачи были написаны в России программистом Колей. Для этого он несколько месяцев почти не выходил из подвала, где стояли только диван и компьютер.

Вот одна из проблем, с которыми столкнулся Коля в те времена. Во время работы пользователь набирает какой-то текст, а так же может его редактировать. При этом, даже если итоговый результат полностью помещается на экран, в процессе работы отдельные строки могут иметь слишком большую длину. Мы не будем просить вас повторить Колин подвиг и заново написать редактор. Определите, какой максимальной длины строка получалась в течение набора текста, если вам известно, какие клавиши и в каком порядке нажимал пользователь.

Входные данные:
Во входном файле INPUT.TXT записана строка из различных символов - последовательность кнопок на клавиатуре, которые нажимал пользователь. Переводы строк заменены на символ '\'. Первые версии редактора поддерживали три управляющие команды, которые закодированы следующим образом:

'<' - удаление предыдущего символа (если курсор находится в начале строки, и эта строка не первая, то удаляется предшествующий перевод строки);
'^' - перемещение в конец предыдущей строки (игнорируется, если курсор находится на первой строке);
'|' - перемещение в конец следующей строки (игнорируется, если курсор находится на последней строке).

Все остальные символы, содержащиеся в файле, имеют коды от 32 (пробел) и выше и должны пониматься как есть. Число нажатий клавиш не превосходит 10^5.

Выходные данные:
В выходной файл OUTPUT.TXT выведите одно целое число - максимальную длину строки, которая была достигнута в течение работы редактора.

Тест 1:
Hello, World???<<<!
15

Тест 2:
Hello, World?\This is^<!!!| a sample.
17

По дате
По рейтингу
Аватар пользователя
Мастер
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
 #include <iostream> 
#include <fstream> 
#include <string> 
 
int main() { 
    std::ifstream input("INPUT.TXT"); 
    if (!input) { 
        std::cerr << "Error opening filen"; 
        return 1; 
    } 
 
    std::string sequence; 
    std::getline(input, sequence); 
 
    int max_length = 0; 
    int current_length = 0; 
    int previous_lines = 0; 
 
    for (char c : sequence) { 
        switch (c) { 
            case '<': 
                if (current_length > 0) { 
                    current_length--; 
                } else if (previous_lines > 0) { 
                    previous_lines--; 
                    current_length = max_length; 
                } 
                break; 
            case '^': 
                if (previous_lines > 0) { 
                    previous_lines--; 
                    current_length = max_length; 
                } 
                break; 
            case '|': 
                previous_lines++; 
                current_length = 0; 
                break; 
            default: 
                current_length++; 
                break; 
        } 
        max_length = std::max(max_length, current_length); 
    } 
 
    std::cout << "Max length: " << max_length << std::endl; 
 
    return 0; 
}