行编辑器

 

#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);
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值