Uva 11988 手残敲键盘系列
一、题意
输入若干行字符串。表示键盘输入的字符序列。
其中'['表示光标移至开头,']'表示把光标移至末尾。
要求输出最终的字符串。
二、解析
需要插入操作,因此考虑用list。移动光标通过维护list的一个迭代器即可,用来表示插入的位置。
三、代码
#include <iostream>
#include <string>
#include <list>
using namespace std;
int main() {
string str;
while(cin >> str) {
list<char> lst;
auto pos = lst.end();
for(char ch : str) {
if(ch == '[') pos = lst.begin();
else if(ch == ']') pos = lst.end();
else pos = lst.insert(pos, ch), pos ++;
}
for(char ch : lst) cout << ch;
cout << endl;
}
}四、归纳
- 这题主要是复习一下list的使用,当需要频繁操作时就用list
- pos = lst.insert(pos, x)表示将x插入到lst的pos迭代器位置,返回值pos表示的是新插入字符的迭代器位置。lst.insert(lst.begin(), x)是在开头插入;lst.insert(lst.end(), x)是在末尾插入。
Re:从零开始的刷题生活 文章被收录于专栏
一起来重刷题叭~ 由于精力有限,题意只说大概,题目细节可以点击vjudge链接查看。 题目以紫薯中的Uva例题/习题为主,有时候有些比较经典的算法也会特意从其它OJ上找题,并不一定出现在紫薯上。 噢,紫薯指——《算法竞赛入门经典(第2版)》by 刘汝佳 喜欢的小伙伴点个赞呗?不然我只能认为一直只有我一个人在自娱自乐orz....
