资源描述:
《数据结构教程 第十六课 串操作应用举例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、► 数据结构教程 第十六课 串操作应用举例数据结构教程 第十六课 串操作应用举例 教学目的:掌握文本编辑的基本原理及方法教学重点:简单文本编辑教学难点:串的存储管理授课内容:一、复习串的堆分配存储表示堆分配存储表示二、文本编辑基本原理图一文本编辑可以用于源程序的输入和修改(如图一),也可用于报刊和书籍的编辑排版以及办公室的公文书信的起草和润色(如图二)。图二可用于文本编辑的程序很多,功能强弱差别很大,但基本操作是一致的:都包括串的查找,插入和删除等基本操作。对用户来讲,一个文本(文件)可以包括若干页,每页包括若干行
2、,每行包括若干文字。对文本编辑程序来讲,可把整个文本看成一个长字符串,称文本串,页是文本串的子串,行又是页的子串。为简化程序复杂程度,可简单地把文本分成若干行。例:下面的一段源程序可以看成一个文本串,main(){floata,b,max;scanf("%f,%f",&a,&b);if(a>b)max=a;elsemax=b;};这个文本串在内存中的存储映像可为:main(){floata,b,max;scanf("%f,%f",&a,&b);ifa>bmax=a;elsemax=b;}在编辑
3、时,为指示当前编辑位置,程序中要设立页指针、行指针、字符指针,分别指示当前页,当前行,当前字符。因此程序中要设立页表、行表便于查找。三、简单行编辑程序例源程序#include#include#include"keyscode.h"#include"menu.h"structline{intcharnum;char*base;};typedefstructlineSequListElemType;#include"sequlist.h"#defineMAXLINES1000intk
4、ey;intcureditline=0;intcurscrtopline=0;intcureditcol=0;intfunckey;inteditwinx=2;inteditwiny=3;inteditwinlines=20;intmainover=0;FILE*curfile;charfilename[255]="test.txt";SequList*Document;charascii(intk);printdoc(intstartfileline,intstartscrline);readdoc(FILE*fp
5、);editline(intcurline,intmaxcolnum){chars[2000];setscrcolor(BLUE,YELLOW);strcpy(s,Document->elem[curline].base);getstring(editwinx,editwiny+curline-curscrtopline,s,maxcolnum);free(Document->elem[curline].base);Document->elem[curline].base=(char*)malloc(strlen(s
6、)+1);strcpy(Document->elem[curline].base,s);}printdoc(intstartfileline,intstartscrline){inti;intj;cursor_hide();i=startscrline;j=startfileline;setscrcolor(BLUE,YELLOW);gotoxy(editwinx,editwiny+startscrline);while(i<=editwinlines&&ilength){clearscrlin
7、e(editwinx,editwiny+i,78);putsxy(editwinx,editwiny+i++,Document->elem[j++-1].base);}while(i<=editwinlines)clearscrline(editwinx,editwiny+i++,78);cursor_show();}getline(FILE*fp,char*l){inti=0;while(!feof(fp))if((l[i++]=fgetc(fp))=='')break;l[i-1]=' ';}closedo
8、c(FILE*fp){inti;fclose(fp);for(i=0;ilength;i++)free(Document->elem[i].base);SequListDestroy(Document);}readdoc(FILE*fp){char*newline;chars[20000];intlinenum=0;str