int main()
{
StrackPtr s = InitStrack();
char c = getchar();
while (c != EOF && c != '\n')
{
edit(&c, s);
c = getchar();
}
char* string = (char*)malloc((StrackLength(s) + 1) * sizeof(char));
*string = '\0';
string++;
while (!StrackEmpty(s))
{
Pop(s, string++);
}
string--;
while (*string != '\0')
{
printf("%c", *string--);
}
putchar('\n');
system("pause");
return 0;
}
///
void edit(char* c, StrackPtr s)
{
char ss;
switch (*c)
{
case '#':
Pop(s, &ss);
break;
case '@':
StrackClear(s);
break;
default :
PushStrack(s,*c);
}
}
StrackPtr InitStrack()
{
StrackPtr s = (StrackPtr)malloc(sizeof(Strack));
s->top = s->base = (ElemType*)malloc(sizeof(ElemType)*INITSIZE);
s->count = 0;
return s;
}
/
void PushStrack(StrackPtr s, ElemType e)
{
if (s->top - s->base >= INITSIZE)
{
s->base = (ElemType*)realloc(s->base, (INITSIZE + INCREASEMENT_SIZE)*sizeof(ElemType));
s->top = s->base + INITSIZE;
INITSIZE += INCREASEMENT_SIZE;
}
*(s->top)++ = e;
s->count++;
}
//
void StrackClear(StrackPtr s)
{
if (s->base == s->top)
{
return;
}
s->count = 0;
s->top = s->base;
}
bool StrackEmpty(StrackPtr s)
{
if (s->base == s->top)
{
return true;
}
else
{
return false;
}
}
///