站内搜索

简单的行编辑器

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

 

  • 上一篇:排序及查找方法
  • 下一篇:用栈设置密码