例4、程序员输入问题 【问题描述】 程序员输入程序出现差错时,可以采取以下的补救措施:按错了一个键时,可以补按一个退格符“#”,以表示前一个字符无效;发现当前一行有错,可以按一个退行符“@”,以表示“@”与前一个换行符之间的字符全部无效。 【输入格式】 输入一行字符,个数不超过 100。 【输出格式】 反序输出一行字符,表示实际有效字符 【输入样例】 2323#adsf@asdf# 【输出样例】 dsa
时间: 2024-02-13 10:03:16 浏览: 176
解放web程序员的输入验证
实现思路:
遍历输入的字符串,遇到“#”就弹出栈顶元素,遇到“@”就跳过当前行,同时弹出栈顶元素,其余情况就将字符入栈。最后输出栈中的元素,即为实际有效字符。
Python 代码实现:
```python
s = input()
stack = []
for c in s:
if c == '#':
if stack:
stack.pop()
elif c == '@':
while stack and stack[-1] != '@':
stack.pop()
if stack:
stack.pop()
else:
stack.append(c)
print(''.join(stack[::-1]))
```
C++ 代码实现:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main() {
string s;
getline(cin, s);
stack<char> st;
for (char c : s) {
if (c == '#') {
if (!st.empty()) {
st.pop();
}
} else if (c == '@') {
while (!st.empty() && st.top() != '@') {
st.pop();
}
if (!st.empty()) {
st.pop();
}
} else {
st.push(c);
}
}
string res;
while (!st.empty()) {
res += st.top();
st.pop();
}
cout << res << endl;
return 0;
}
```
阅读全文