分享
 
 
 

汉字行编辑程序

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

我写了一个汉字行编辑程序,请各位多多指教,找出本程序的不足,以提高本程序的功能,!

程序如下:

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#include "conio.h"

#define len 4

#define LINESIZE 80 /*每行长度为80个字符*/

strUCt TEXT

{

struct TEXT *prior;

char str[LINESIZE+1]; /*包括 '\0' 在内,设置长度为LINESIZE+1*/

struct TEXT *next;

};

struct TEXT *TPTR,*BPTR,*KPTR,*QPTR,*SPTR,*YPTR,*XPTR,*FPTR;

struct TEXT *ptr,*work;

int CHG,ERR,CMP,IND,CTR,i,NUM;

char ch,BUF;

char IN[LINESIZE+1],NUMD[len],MAT[LINESIZE],REP[LINESIZE],temp[LINESIZE];

void main() /*#1 主要起调度作用*/

{

void IN99v();

void READ_LINE();

void INPUT();

void TOP();

void UP();

void NEXT();

void ENTER();

void LIST();

void DELETE();

void REPLACE();

void FIND();

void INSERT();

void COPY();

void STORE();

void WR99vE_LINE();

clrscr();

IN99v();

while(1)

{

if(IND==0)

printf("\n-"); /*命令提示符*/

READ_LINE();

i=0;

if(IND!=0)

INPUT();

else

{

ch=IN[0];

if(ch=='T'ch=='t')

TOP();

else if(ch=='U'ch=='u')

UP();

else if(ch=='N'ch=='n')

NEXT();

else if(ch=='E'ch=='e')

ENTER();

else if(ch=='L'ch=='l')

LIST();

else if(ch=='D'ch=='d')

DELETE();

else if(ch=='R'ch=='r')

REPLACE();

else if(ch=='F'ch=='f')

FIND();

else if(ch=='I'ch=='i')

INSERT();

else if(ch=='C'ch=='c')

COPY();

else if(ch=='S'ch=='s')

STORE();

else if(ch=='Q'ch=='q')

exit(0);

else

{

strcpy(IN,"?!\0"); /*不正确的编辑命令响应*/

WR99vE_LINE();

}

}

}

}

void IN99v() /*#2 初始化正文编辑程序*/

{

void WR99vE_LINE();

printf("\n ________________________________________");

printf("\n program for edit ");

printf("\n T:TOP U N:UP N N:NEXT ");

printf("\n E:ENTER L N:LIST D N:DELETE ");

printf("\n R /STR1/STR2/ N:REPLACE F /SFTR1/:FIND ");

printf("\n C N:COPY S N:STORE I:INSERT ");

printf("\n Q:QU99v -: the sing of order ");

printf("\n -----------------------------------------");

FPTR=(struct TEXT*)malloc(sizeof(struct TEXT));

FPTR->prior=0;

FPTR->next=0;

CMP=CHG=ERR=0;

IND=0;

BPTR=TPTR=0; /*无正文链*/

KPTR=QPTR=0; /*无工作链*/

strcpy(IN,"ED99v!\0");

WR99vE_LINE();

}

void READ_LINE() /*#3 从终端接收一行正文并且把它存到缓冲器IN中 */

{

i=0;

BUF=getchar();

while(i<LINESIZE && BUF!='\n')

{

if(BUF=='@')

{

if(i!=0)

{

if(IN[i-1]<0)

{

IN[--i]=' '; /*是汉字删掉两个字节*/

IN[--i]=' ';

}

else

IN[--i]=' '; /*不是汉字删掉一个字节*/

}

}

if(BUF=='#')

i=0;

if(BUF<0)

{

IN[i++]=BUF;

IN[i++]=getchar();

}

else

if(BUF!='@' && BUF!='#')

IN[i++]=BUF;

BUF=getchar();

}

if(i>=LINESIZEBUF=='\n')

{

if(i==0)

IN[i++]='\n';

IN[i]='\0';/*存入字符串结束标志*/

}

fflush(stdin);

}

void WR99vE_LINE() /*#4 把IN中的内容输出到终端*/

{

printf("\n%s",IN);

}

void INPUT() /*#5 从缓冲器IN取来一行正文放到正文文件中*/

{

void GO_ED99v();

void CONNECT();

void INSERT_CHAIN();

void WR99vE_LINE();

ch=IN[0];

if(IND==1) /*尚未接收到正文*/

{

if(ch=='\n')

GO_ED99v(); /*转到编辑模式*/

else

{

if(FPTR==0)

{

strcpy(IN,"NOFREE!\0");

WR99vE_LINE();

}

else

{

ptr=FPTR; /*YPRT在此模块内主要起链接串之用*/

XPTR=FPTR;

strcpy(XPTR->str,IN);

IND=2;

}

}

}

else

{

if(ch=='\n') /*空行,从自由链把正文移到正文链并转到编辑模式*/

{

CONNECT();

INSERT_CHAIN();

GO_ED99v();

}

else

{

XPTR->next=(struct TEXT*)malloc(sizeof(struct TEXT));

if(XPTR->next==0)

{

CONNECT();

INSERT_CHAIN();

strcpy(IN,"NOFREE!\0");

WR99vE_LINE();

GO_ED99v(); /*内存空间不足,自动转到编辑模式*/

}

else

{

XPTR=XPTR->next;

XPTR->prior=ptr;

ptr=XPTR;

XPTR->next=0;

strcpy(XPTR->str,IN);

}

}

}

}

void GO_ED99v() /*#6 转到编辑模式*/

{

void WR99vE_LINE();

IND=0;

strcpy(IN,"ED99v!\0");

WR99vE_LINE();

}

void CONNECT() /*#7 分离后,只需让TPTR,BPTR指向自由链,但是要让FPTR指向一个新的结点,否则将失去指向*/

{

YPTR=FPTR;

FPTR=(struct TEXT*)malloc(sizeof(struct TEXT));

if(FPTR!=0)

{

FPTR->prior=0;

FPTR->next=0;

}

}

void INSERT_CHAIN() /*#8 把新输入的正文加到正文链中,紧接在当前行的后面。开始时YPTR指向输入正文的第一行,*/

{ /* XPTR指向最后一行。指针把原有的正文分成两部分,分别为前半和后半。*/

if(BPTR==0)

{

if(TPTR==0) /*原来没有正文链*/

{

TPTR=YPTR; /*使分离出的自由链的第一行为新的正文链的第一行,自由链的最后一行为新的正文链的最后一行*/

BPTR=XPTR;

}

else

{

XPTR->next=TPTR;

TPTR->prior=XPTR;

&nbs

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有