数据结构教程 第十六课 串操作应用举例

上传人:woxinch****an2018 文档编号:39301278 上传时间:2018-05-14 格式:DOC 页数:11 大小:190.50KB
返回 下载 相关 举报
数据结构教程 第十六课 串操作应用举例_第1页
第1页 / 共11页
数据结构教程 第十六课 串操作应用举例_第2页
第2页 / 共11页
数据结构教程 第十六课 串操作应用举例_第3页
第3页 / 共11页
数据结构教程 第十六课 串操作应用举例_第4页
第4页 / 共11页
数据结构教程 第十六课 串操作应用举例_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《数据结构教程 第十六课 串操作应用举例》由会员分享,可在线阅读,更多相关《数据结构教程 第十六课 串操作应用举例(11页珍藏版)》请在金锄头文库上搜索。

1、 数据结构教程 第十六课 串操作应用举例数据结构教程数据结构教程 第十六课第十六课 串操作应用举例串操作应用举例教学目的:教学目的: 掌握文本编辑的基本原理及方法教学重点:教学重点: 简单文本编辑教学难点:教学难点: 串的存储管理授课内容:授课内容:一、复习串的堆分配存储表示堆分配存储表示二、文本编辑基本原理图一文本编辑可以用于源程序的输入和修改(如图一),也可用于报刊和书籍的编辑排版以及办公室的公文书信的起草和润色(如图二)。图二可用于文本编辑的程序很多,功能强弱差别很大,但基本操作是一致的:都包括串的查找,插入和删除等基本操作。对用户来讲,一个文本(文件)可以包括若干页,每页包括若干行,每

2、行包括若干文字。对文本编辑程序来讲,可把整个文本看成一个长字符串,称文本串,页是文本串的子串,行又是页的子串。为简化程序复杂程度,可简单地把文本分成若干行。例:下面的一段源程序可以看成一个文本串,main()main()floatfloat a,b,max;a,b,max;scanf(“%f,%f“,scanf(“%f,%f“,ifif (ab)(ab) max=a;max=a;elseelse max=b;max=b;这个文本串在内存中的存储映像可为:main()nfloata,b,max;nscanf(“%f,%f“,nifabmax=a;nelsemax=b;nn在编辑时,为指示当前编辑

3、位置,程序中要设立页指针、行指针、字符指针,分别指示当前页,当前行,当前字符。因此程序中要设立页表、行表便于查找。三、简单行编辑程序例源程序#include #include #include “keyscode.h“ #include “menu.h“struct lineint charnum;char *base; ;typedef struct line SequListElemType;#include “sequlist.h“#define MAXLINES 1000int key; int cureditline=0; int curscrtopline=0; int cured

4、itcol=0; int funckey; int editwinx=2; int editwiny=3; int editwinlines=20; int mainover=0; FILE *curfile;char filename255=“test.txt“;SequList *Document;char ascii(int k); printdoc(int startfileline,int startscrline); readdoc(FILE *fp);editline(int curline,int maxcolnum) char s2000;setscrcolor(BLUE,Y

5、ELLOW);strcpy(s,Document-elemcurline.base);getstring(editwinx,editwiny+curline-curscrtopline,s,maxcolnum);free(Document-elemcurline.base);Document-elemcurline.base=(char *)malloc(strlen(s)+1);strcpy(Document-elemcurline.base,s); printdoc(int startfileline,int startscrline)int i;int j;cursor_hide();i

6、=startscrline;j=startfileline;setscrcolor(BLUE,YELLOW);gotoxy(editwinx,editwiny+startscrline);while(ilength)clearscrline(editwinx,editwiny+i,78);putsxy(editwinx,editwiny+i+,Document-elemj+ -1.base);while(ilength;i+)free(Document-elemi.base);SequListDestroy(Document); readdoc(FILE *fp) char *newline;

7、char s20000;int linenum=0;struct line curline;if(!fp) return;while(!feof(fp)getline(fp,s);linenum+;newline=(char *)malloc(strlen(s)+1);strcpy(newline,s);curline.base=newline;curline.charnum=strlen(newline);SequListInsert(Document,linenum,curline); char ascii(int k) char c;c=(k8;if(c=32i-)si=si-1;si=

8、c; deletechar(char *s,int pos) int i;int j;j=strlen(s);for(i=pos;i0)cureditline-;gotoxy(editwinx,editwiny+cureditline);editline(cureditline,78);break; case KEYDown:if (cureditlinelength-1)cureditline+;gotoxy(editwinx,editwiny+cureditline);editline(cureditline,78);break; case KEYCtrl_y:deleteline(cur

9、editline+1);if(Document-length=0)insertnewline(cureditline+1);if(cureditline=Document-length)insertnewline(cureditline+1);printdoc(cureditline+1,cureditline-curscrtopline);gotoxy(editwinx,editwiny+cureditline);editline(cureditline,78);break; case KEYLeft: case KEYRight:break; case KEYCtrl_s:break; case ESC:cursor_hide();dofunc(getmenuitem();break; case KEYAlt_x:mainover=1;break; default:gotoxy(editwinx,editwiny+cureditline-curscrtopline);editline(cureditline,78);break;closedoc(curfile);setscrcolor(BLACK,WHITE);clrscr();cursor_show();

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号