#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define stacksize 251
typedef char ElemType;
typedef struct
{
ElemType *top;
ElemType *base;
int Stacksize;
}SQ;
int InitStack(SQ &S)
{
S.base=(ElemType *)malloc(stacksize*sizeof(ElemType));
if(!S.base) exit(-1);
S.top=S.base;
S.Stacksize=stacksize;
return 1;
}
int Push(SQ &S,ElemType e)
{
*S.top++=e;
return 1;
}
int Pop(SQ &S,ElemType &e)
{
if(S.top==S.base) return 0;
e=*--S.top;
return 1;
}
void ClearStack(SQ &S)
{
S.top=S.base;
}
int EmptyStack(SQ &S)
{
if(S.top==S.base) return 1;
return 0;
}
int main()
{
char str[251],sstr[251];
while(~scanf("%s",str))
{
SQ S;
char e;
InitStack(S);
int len;
len=strlen(str);
for(int i=0;i<len;i++)
{
if(EmptyStack(S)&&(str[i]=='#'||str[i]=='@'))
continue;
else
{
if(EmptyStack(S))
Push(S,str[i]);
else if(str[i]=='#')
Pop(S,e);
else if(str[i]=='@')
ClearStack(S);
else
Push(S,str[i]);
}
}
int j=-1;
while(!EmptyStack(S))
{
Pop(S,e);
sstr[++j]=e;
}
len=strlen(sstr);
for(;j>=0;j--)
printf("%c",sstr[j]);
printf("\n");
}
}
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=1479&cid=1775