学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
小猴是一个热爱英语课的小学生。
小猴很喜欢玩字母拼字游戏,每次按顺序插入一些字母,使得相同字母组成的连续字符串,为了记录自己的拼字结果,小猴希望实现一个字符串编辑器。
开始时,编辑器的文本是空的,为了定位操作的位置,编辑器还提供了一个光标。光标是指向文本的字符间隙的一个标记。
给定
n
n
n条修改操作,请模拟编辑器在这些操作下的行为,最后输出编辑器所记录的文本内容:
- 插入操作:该操作还需要提供一个字符 x x x作为参数,编辑器在光标的左侧插入该字符;
- 右移操作:编辑器将光标向右移动一格,如果光标已经在最右端,则忽略这步操作;
- 左移操作:编辑器将光标向左移动一格,抑果光标已经在最左端,则忽略这步操作;
- 删除操作:文本编辑器删去光标右侧的字符,若光标右侧没有字符,则忽略这步操作。
【输入】
第一行一个整数
n
n
n;
第二行到第
n
+
1
n+1
n+1行,每行表示一个操作:
- 插入操作以字母 I I I开头,后接一个字母 x x x,保证该字母是一个大写的英文字母;
- 删除操作仅有一个字母 D D D;
- 右移操作仅有一个字母 R R R;
- 左移操作仅有一个字母 L L L。
【输出】
一行,包含一个字符串,表示编辑器最后所记录的文本内容。
【输入样例】
5
I H
I E
I L
I L
I O
【输出样例】
HELLO
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, pos;
char op, x, s[500010];
stack<char> A, B;
int main()
{
cin >> n;
while (n--) {
cin >> op;
if (op=='I') {
cin >> x;
A.push(x);
} else if (op=='D' && B.size()) {
B.pop();
} else if (op=='R' && B.size()) {
A.push(B.top());
B.pop();
} else if (op=='L' && A.size()) {
B.push(A.top());
A.pop();
}
}
while (A.size()) {
s[++pos] = A.top();
A.pop();
}
for (int i=pos; i>=1; i--) cout << s[i];
while (B.size()) {
cout << B.top();
B.pop();
}
cout << endl;
return 0;
}
【运行结果】
5
I H
I E
I L
I L
I O
HELLO