打字机修复:还原正常输出
打字机修复:还原正常输出
题目描述
小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
写一个C++代码内容:```cpp
#include
int main() { string s; cin >> s;
stack<char> stk;
bool isBad = false;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '[' || s[i] == ']') {
isBad = !isBad;
} else if (s[i] == '}') {
if (!stk.empty()) {
stk.pop();
}
} else {
if (isBad) {
stk.push(s[i]);
} else {
cout << s[i];
}
}
}
while (!stk.empty()) {
cout << stk.top();
stk.pop();
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/phOq 著作权归作者所有。请勿转载和采集!