问题描述
在显示屏上盲打一段文字,在这过程中由于键盘的问题,Home键与end键会自动按下,显有一段文本,其中‘[’表示Home键按下,‘]’表示End键按下,求出显示屏上的文字排序
示例输入
This_is_a_[Beiju]_text
[[]][][]Happy_Birthday_to_Tsinghua_University
示例输出
BeijuThis_is_a__text
Happy_Birthday_to_Tsinghua_University
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxn 1000
int main()
{
int last,cur,next[maxn]; //last记录末位置,cur指向当前位置,next[]记录输出顺序
int i;
char s[maxn]; //输入字符串
while(scanf("%s",s+1)==1) //s[0]空出
{
last=cur=0;
next[0]=0; //next[i]置0,意为不指向任何值
for(i=1;i<=strlen(s+1);i++)
{
if(s[i]=='[') cur=0; //当输入]时,cur光标指向首位置
else if(s[i]==']') cur=last; //当输入]时,cur光标指向末尾
else //当读入其他字符时,插值操作
{
next[i]=next[cur];
next[cur]=i;//在next[cur] i中间插入next[i]
if(last==cur) last=i; //当末尾值和当前光标位置相同时,last和cur一样向i跟进
cur=i; //尾光标向后移动
}
}
//顺次输出
for(i=next[0];i!=0;i=next[i])
printf("%c",s[i]);
printf("\n");
}
return 0;
}