#include <stdlib.h>         /* For _MAX_PATH definition */ #include <stdio.h> #include <malloc.h> #include <string.h> #include <conio.h>  #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10
  struct SqStack {  char *base;  char *top;  int stacksize; };
 void InitStack(SqStack &S) {  S.base=(char*)malloc(STACK_INIT_SIZE *sizeof(char));  if (!S.base)   exit(1);  S.top=S.base;  S.stacksize=STACK_INIT_SIZE; } void push(SqStack &S,char e) {  if(S.top-S.base>=S.stacksize)  {   S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));   if (!S.base)    exit(1);   S.top=S.base+S.stacksize;   S.stacksize+=STACKINCREMENT;  }  *S.top++=e; } char pop(SqStack &S,char &e) {  if (S.top==S.base)       return false;  e=*--S.top;  return e; } void ClearStack(SqStack &S) {  S.top=S.base; } void DestroyStack(SqStack &S) {  free(S.base);  S.top=S.base; } bool StackEmpty(SqStack &S) {  if (S.top==S.base)   return true;  return false; } /*void PrintStack(SqStack &S) {  char e;  while (!StackEmpty(S))  {   pop(S,e);   printf("%d",e);  } }*/ void main() {  char ch,e;  SqStack S,D;  InitStack(S);  InitStack(D);  ch=getchar();  while (ch!=EOF)  {   while(ch!=EOF&&ch!='/n')   {    switch(ch)    {    case'#':pop(S,e);break;    case'@':ClearStack(S);break;    default:push(S,ch);break;    }    ch=getchar();   }   while (!StackEmpty(S))   {    e=pop(S,e);    push (D,e);       }   while (!StackEmpty(D))   {    e=pop(D,e);    printf("%c",e);   }   ClearStack(S);   if(ch!=EOF)    ch=getchar();  }  DestroyStack(S); }                      
 
 |