打字机修复:模拟损坏打字机的输出

小C有一台打字机,使用打字机打字时,每在键盘上按一个字母键,屏幕中光标后的位置就会出现对应的字母,光标也会后移一位,一开始只有一个光标,没有字母。除此以外,打字机还有三个按键,分别是光标左移、光标右移以及删除按键(功能为删除光标前的字符,并将光标左移一位)。如果光标已经位于最左侧,则按下光标左移或删除按键时没有反应。如果光标已经位于最右侧,则按下光标右移时没有反应。

例如,如果小C依次按下 'a'、'b'、光标向左、'c',则屏幕上会显示 'acb' ,此时光标位于 'c' 、'b' 之间。

在此基础上,如果小C继续按下删除按键、'd',则屏幕上会显示 'adb' ,此时光标位于 'd' 后面。

但是有一天,他的打字机坏了:

  • 按下字母键时,反应和之前一样。
  • 按下光标左移时,光标并不会左移,而是会在屏幕上输出一个 '['。
  • 按下光标右移时,光标并不会右移,而是会在屏幕上输出一个 ']'。
  • 按下删除按键时,并不会删光标左侧的字母并将光标左移一位,而是会在屏幕上输出一个 '}'。

例如,对于之前给出的例子,坏了以后的打字机将显示 'ab[c}d' ,此时光标位于 'd' 后面。

现在,给出小C按下一些按键之后坏掉的打字机输出的内容,请你输出打字机没坏时小C依次按下相同的按键屏幕上会显示的内容。

输入格式

从标准输入读入数据。 输入一行,为一个长度不超过 $10^6$ 的字符串,包含大小写字母以及 '[' 、']' 、'}`。

输出格式

输出到标准输出。 输出一行,为打字机没坏时,小C依次按下相同的按键屏幕上会显示的内容。

样例 #1

样例输入 #1

ab[c}d

样例输出 #1

ad

代码实现(C++)

#include <iostream>
#include <stack>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;
    
    stack<char> stk;
    string result;
    
    for (char c : s) {
        if (c == '[') {
            stk.push('[');
        } else if (c == ']') {
            stk.pop();
        } else if (c == '}') {
            if (!stk.empty()) {
                stk.pop();
            } else {
                result += '}';
            } 
        } else {
            if (!stk.empty()) {
                result += c;
            }
        }
    }
    
    cout << result << endl;
    
    return 0;
}
打字机修复:模拟损坏打字机的输出

原文地址: https://www.cveoy.top/t/topic/qCAD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录