这道题并不困难,重要的是用cur的值来表示光标位置的这种思想。无论是HOME键还是END键实质都是光标位置的变化,用数组来表示链表也是本题应该学习的。
#include<bits/stdc++.h>
using namespace std;
int n,Next[100005],cur,last;
char s[100005];
int main()
{
while(scanf("%s",s+1)!=EOF)
{
int n=strlen(s+1);
cur=0;last=0;
memset(Next,0,sizeof(Next));
for(int i=1;i<=n;i++)
{
if(s[i]=='[')
cur=0;
else if(s[i]==']')
cur=last;
else
{
Next[i]=Next[cur];//在cur后插入i
Next[cur]=i;
if(cur==last) last=i;//更新最后一个字符的编号
cur=i;//移动光标
}
}
Next[last]=0;
for(int i=Next[0];i!=0;i=Next[i])
printf("%c",s[i]);
printf("\n");
}
return 0;
}