论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

简单的行编辑器

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:45:17

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

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058