资源描述:
《简单的行编辑器(C语言).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、简单的行编辑器【要求】(1)设置一个简单的行编辑器,每行以回车结束(2)数据以文件形式存储(3)编辑器具有查找、替换、修改数据的功能2011-7-9。请把所有的注释信息提取出来就可以写程序设计报告。#include/*标准文件流操作,这里使用了open/fclose/fprintf/printf/scanf/gets函数*/#include/*标准系统库,这里使用了malloc/free/exit*/#include/*标准字符串库,这里使用st
2、rlen/strcpy/memcpy/memset*/#defineszLINE252/*定义一行字符串最长为252字节*/#defineCMDS12/*定义12个标准行编辑命令*//*采用链表存储文本*/typedefstructLINE{chartext[szLINE];/*文本内容*/structLINE*next;/*链表指针*/}L;/*简写无类型整数*/typedefunsignedintU;/*定义12个行编辑命令的标准格式*/typedefvoid(*FUNC)(L**,char*);/
3、*定义12个标准行编辑命令的关键字*/charkeywords[CMDS][8]={"quit","help","load","save","view","count","append","insert","erase","edit","lookup","replace"};/*endkeywords*//*清空链表操作*/voidclear(L**lines){L*a=0,*b=0;if(!lines)return;a=*lines;while(a){b=a->next;free(a);a=b;}/*
4、endwhile*/*lines=0;}/*endclear*//*在链表中根据行号index调出指定的行*/L*locate(L*lines,Uindex){L*t=lines;Ui=0;if(!t)return0;if(index==0)returnt;for(i=0;inext;if(!t)return0;}/*next*/returnt;}/*endlocate*//*浏览命令,如果f存在则以带行号格式保存文件(如果f==stdout则打印到屏幕上),浏览范围为
5、from到to(行号)。view(lines,0,0,0)表示统计已加载到内存的文本行数量*/intview(L*lines,FILE*f,Ufrom,Uto){L*t=lines;Uindex=0;while(t){index++;if(f&&index>=from&&index<=to)fprintf(f,"%d:%s",index,t->text);t=t->next;}/*endwhile*/returnindex;}/*endview*//*在当前文档中根据关键字进行搜索,并将搜索结果打印出来
6、*/voidlookup(L*lines,char*string){L*t=0;Uindex=0;if(!string)return;t=lines;while(t){index++;if(strstr(t->text,string))printf("%d:%s",index,t->text);t=t->next;}/*endwhile*/}/*endlookup*//*在一行文本中执行替换命令,把所有关键字替换为新关键字*/voidrpc(char*string,char*key,char*repla
7、cement){charfine[szLINE],*x=0,*y=0,*z=0;intla=0,lb=0,r=0;if(!string
8、
9、!key
10、
11、!replacement)return;memset(fine,0,szLINE);x=string;y=fine;/*首先记录新旧关键字长度*/la=strlen(key);lb=strlen(replacement);do{/*用指针逐个比较*/r=memcmp(x,key,la);if(r){/*如果关键字不匹配则复制字符串*/*y=*x;x++;y
12、++;}else{/*如果关键字匹配则替换字符串*/memcpy(y,replacement,lb);x+=la;y+=lb;}/*endif*/}while(*x);/*将替换完成的结果返回*/memcpy(string,fine,szLINE);}/*endrpc*//*全文替换*/voidreplace(L*lines,char*string,char*replacement){L*t=0;Uindex=0;if(!string
13、
14、!