您正在用一个坏键盘键入一个长文本。这个键盘的问题是时不时“ Home ”键或“ End ”键会在您输入文本时自动按下。您并没有意识到这个问题,因为你只关注文本,甚至没有打开显示器。完成键入后,您打开显示器,在屏幕上看到文本。请您输出看到的文本。
输入格式:
输入给出若干测试用例。每个测试用例都是一行,包含至少一个,最多 100,000 个字母、下划线和两个特殊字符 ‘[’ 和 ‘]’ ;其中 ‘[’ 表示“ Home ”键,而 ‘]’ 表示“ End ”键。输入以 EOF 结束。
输出格式:
对于每个测试用例,输出在屏幕上的悲剧的文本。
输入样例:
This_is_a_[Beiju]_text
[[]][][]Happy_Birthday_to_Tsinghua_University
输出样例:
BeijuThis_is_a__text
Happy_Birthday_to_Tsinghua_University
【UVA 11988】悲剧文本 Broken Keyboard_悲剧文本 oj_Ding Jiaxiong的博客-CSDN博客
//这位博主的思路分析非常清楚,秒懂,我原来通过样例理解的就是将【】里面的内容输出在前面(不包括【】符号),其他挨个输出在后面.我的错误代码在于对于有多个【】出现的情况很难实现。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin>>s){
list<char> text;
list<char>::iterator it = text.begin();
for(int i = 0 ; i < s.size() ; i++){
if(s[i] == '['){
it = text.begin();
}else if(s[i] == ']'){
it = text.end();
}
else{
it = text.insert(it , s[i]);//从现在的it位置,插入s[i]
it++;
}
}
for(it = text.begin() ; it != text.end() ; it ++){
cout << *it;
}
s.clear();
cout << endl; }
return 0;
}