这题是我最喜欢的字符串处理。。。。。
题目大意是给你一个字符串,字符串是模拟键盘的记录的,其中[
代表Home键,]
代表End键。 求这样按下键盘后的屏幕输出。
按照题目要求模拟一下即可。
本题最直接的思路就是模拟一下这个过程,但是这需要在一串字符之前加上另一个串,所以这里用了双向队列。
双向队列是可以在前边和后边插入元素的数据结构。在这里,双向队列仅仅记录一下字符串的“指针”(←,就是下标),而不真正的移动字符串,等到要输出的时候,按照指针顺序输出字符串。
AC代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <iostream> #include <deque> using namespace std; int main(int agrc, char *agrv[]) { string str; while(getline(cin, str)) { deque<int> output;
output.push_back(0); for(int i=0; i < str.length(); i++) if(str[i] == '[') output.push_front(i + 1); else if(str[i] == ']') output.push_back(i + 1); for(deque<int>::iterator it = output.begin(); it != output.end(); it++) for(int i = (*it); str[i] && str[i] != '[' && str[i] != ']'; i++) cout.put(str[i]); cout<<endl; } }
|