打字机修复 - 从损坏输出还原正常文本

小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

adb

代码实现

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

string repairTypewriter(string s) {
    stack<char> st;
    string result = "";
    for (char c : s) {
        if (c == '[') {
            if (!st.empty()) {
                result += st.top();
                st.pop();
            }
        } else if (c == ']') {
            if (!st.empty()) {
                st.pop();
            }
        } else if (c == '}') {
            if (!st.empty()) {
                result += st.top();
                st.pop();
            }
            result += '}';
        } else {
            st.push(c);
            result += c;
        }
    }
    return result;
}

int main() {
    string s;
    cin >> s;
    string result = repairTypewriter(s);
    cout << result << endl;
    return 0;
}
打字机修复 -  从损坏输出还原正常文本

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

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