| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 911 人关注过本帖
标题:[分享] 行编辑程序
只看楼主 加入收藏
homer2005nh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-11-15
收藏
 问题点数:0 回复次数:5 
[分享] 行编辑程序

/*行编辑程序*/

/*利用栈实现的*/

#include "stdio.h"
#include "stdlib.h"
#define SIS 100 /*初始大小*/
#define SI 10 /*增量大小*/
#define OVERFLOW 0
#define TRUE 1
#define FALSE 0

typedef struct{
char *base;
char *top;
char stacksize;
}Sqstack;

char Initstack(Sqstack *s)
{
s->base=(char *)malloc(SIS*sizeof(char));
s->top=s->base;
s->stacksize=SIS;
}

char Push(Sqstack *s, char e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(char *)realloc(s->base,(SIS+SI)*sizeof(char));
if(!s->base) exit(OVERFLOW);
s->top=s->base+s->stacksize;
s->stacksize+=SI;
}
*s->top++=e;
}

char StackEmpty(Sqstack s)
{
if(s.top==s.base)
return TRUE;
else
return FALSE;
}


char Pop(Sqstack *s, char *e)
{
if(s->top==s->base) return FALSE;
*e=*(--s->top);
}

char GetTop(Sqstack s)
{
char e;
if(s.top==s.base) return FALSE;
e=*(s.top-1);
return(e);
}


char Clearstack(Sqstack *s)
{
while(s->top!=s->base)
s->top=s->base;
}
char Destroystack(Sqstack *s)
{
while(s->top!=s->base)
{
s->top--;
free(s->top);
}
}
void LineEdit()
{
Sqstack *s;
char ch,c;
s=(Sqstack *)malloc(sizeof(Sqstack));
Initstack(s);
ch=getchar();
while(ch!=EOF&&ch!='\n')
{
switch(ch)
{
case '#': Pop(s,&c); break;
case '@': Clearstack(s); break;
default : Push(s,ch); break;
}
ch=getchar();
}
while(s->top!=s->base)
{
Pop(s,&c);
printf("%c",c);
}
Destroystack(s);
}

main()
{
printf("Input data :\n");
LineEdit();
}



/*行编辑程序*/

/*利用栈实现的*/

#include "stdio.h"
#include "stdlib.h"
#define SIS 100 /*初始大小*/
#define SI 10 /*增量大小*/
#define OVERFLOW 0
#define TRUE 1
#define FALSE 0

typedef struct{
char *base;
char *top;
char stacksize;
}Sqstack;

char Initstack(Sqstack *s)
{
s->base=(char *)malloc(SIS*sizeof(char));
s->top=s->base;
s->stacksize=SIS;
}

char Push(Sqstack *s, char e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(char *)realloc(s->base,(SIS+SI)*sizeof(char));
if(!s->base) exit(OVERFLOW);
s->top=s->base+s->stacksize;
s->stacksize+=SI;
}
*s->top++=e;
}

char StackEmpty(Sqstack s)
{
if(s.top==s.base)
return TRUE;
else
return FALSE;
}


char Pop(Sqstack *s, char *e)
{
if(s->top==s->base) return FALSE;
*e=*(--s->top);
}

char GetTop(Sqstack s)
{
char e;
if(s.top==s.base) return FALSE;
e=*(s.top-1);
return(e);
}


char Clearstack(Sqstack *s)
{
while(s->top!=s->base)
s->top=s->base;
}
char Destroystack(Sqstack *s)
{
while(s->top!=s->base)
{
s->top--;
free(s->top);
}
}
void LineEdit()
{
Sqstack *s;
char ch,c;
s=(Sqstack *)malloc(sizeof(Sqstack));
Initstack(s);
ch=getchar();
while(ch!=EOF&&ch!='\n')
{
switch(ch)
{
case '#': Pop(s,&c); break;
case '@': Clearstack(s); break;
default : Push(s,ch); break;
}
ch=getchar();
}
while(s->top!=s->base)
{
Pop(s,&c);
printf("%c",c);
}
Destroystack(s);
}

main()
{
printf("Input data :\n");
LineEdit();
}



搜索更多相关主题的帖子: 编辑程序 分享 
2006-11-15 22:35
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
大概说下行编译器的功能吧.

倚天照海花无数,流水高山心自知。
2006-11-16 17:24
homer2005nh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-11-15
收藏
得分:0 
可以删除 #前的一个字符,
也可以删除@前的所有字符

做我自己!
2006-11-17 12:25
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
呵呵,链表做的.写的不错啊.
以前好象也写过一个,找到再帖上来吧.

倚天照海花无数,流水高山心自知。
2006-11-17 12:38
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 


/*行编译器*/
#include<stdio.h>
typedef struct
{
char opst[250];
int top ;
}
seqstack ;

void print(seqstack s)
{
seqstack q ;
q.top=-1 ;
while(s.top!=-1)
{
if(s.opst[s.top]=='#') /*退格判断,将当前判断及错误字符删除*/
{
s.top=s.top-2 ;
}

/*退行判断*/
/*找上一个换行符,将错误字符删除*/
else
{
if(s.opst[s.top]=='@')
{
while(s.opst[s.top]!='\n')
{
s.top--;
}
}
}

q.opst[++q.top]=s.opst[s.top--];
/*对应进栈Q,得到反序*/
}
/*将栈Q中的字符输出*/
while(q.top!=-1)
{
printf("%c",q.opst[q.top--]);
}
}


int main()
{
seqstack s ;
char c ;
s.top=-1 ;
printf("please input the string:");
scanf("%c",&c);
s.opst[++s.top]=c ;
/*接收第一个字符*/
/*继续接受字符,存入栈S中,以字符0结束输入*/
while((c=getchar())!='0')s.opst[++s.top]=c ;
print(s);
/*核心函数,行编译器*/
printf("\n");
return(0);
}


倚天照海花无数,流水高山心自知。
2006-11-17 16:05
dear
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-9
收藏
得分:0 
  行编辑器是做什么用的?不太明白只知道可以实现逆序
2006-11-18 22:53
快速回复:[分享] 行编辑程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022191 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved