简易文本编辑器.docx
- 文档编号:25162677
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:13
- 大小:57.83KB
简易文本编辑器.docx
《简易文本编辑器.docx》由会员分享,可在线阅读,更多相关《简易文本编辑器.docx(13页珍藏版)》请在冰豆网上搜索。
简易文本编辑器
数据结构课程设计
题目简易文本编辑的探究
系(部)电子与信息工程系
班级
姓名
学号
指导教师王静
2011年01月03日
电子与信息工程系
《数据结构》课程设计任务书
设计题目
简易文本编辑器
已知技术参数和设计要求
要求:
1、具有图形菜单界面;
2、查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行
块),删除
3、可正确存盘、取盘;
正确显示总行数。
设计内容与步骤
1、结点结构的设计
2、算法设计与分析
3、程序设计、实现、调试
4、课程设计说明书
设计工作计划与进度安排
1、设计工作4学时
2、实现与调试16学时
3、课程设计说明书8学时
设计考核要求
1、考勤30%
2、课程设计说明书70%
计算机教研室制
简易文本编辑的探究
张权
安康学院计算机科学与技术09级陕西省安康市725000
摘要:
简易文本编辑是最常用的文档提取和编辑工具。
通过对简易文本的研究,利用C语言实现了从文件中读取数据,并进行的提取和简易编辑的功能。
没有脱离C语言下数组长度的有限性。
关键字:
文件提取、存储;字符串替换、查找;插入;删除;行移动;
1引言
在操作系统中,外存中的数据、文档或程序,都是以文件的形式保存,甚至对目录和各种设备的操作也都等同于文件的操作。
因此对文件的操作就要求首先从文件中读取数据,然后对读取的数据进行操作,最后,当操作完成后再将数据重新写入文件中。
在此过程中必须熟练掌握文件的基本操作。
首先要调用一个文件,需要有以下的信息:
1、文件当前的读写位置,文件存放在哪个磁介质中,含盘符及路径。
2、与该文件对应的内存缓冲区的地址。
3、缓冲区中未被处理的字符串。
4、文件操作方式,是读数据还是写数据。
从文件中读取数据,然后以链表的形式放入内存中,对文件数据进行查找替换删除操作。
找到要进行操作的字符串的位置,然后再进行一系列的操作。
最后,完成对文件数据的操作,重新调用文件指针将数据写入文件操作,完成实验。
将数据从文件中读取出来以后,在进行操作。
2问题分析
一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。
3数据结构与算法分析
3.1结构与算法分析
为实现数据结构的有序存储,该编辑器应该用顺序表来存储输入的信息。
顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。
其特点为:
在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存储表中的元素。
在编辑器的主界面中如下提示信息:
3.11清空以前的文本信息:
将用数据内容全部置为0;
显示当前文本信息:
遍历用数组存入的信息,并输出到显示器上:
3.12编辑信息:
定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,这个整型变量用于记录一维数组中存入数据的个数;
3.13替换文本信息:
首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息:
3.14插入文本信息:
首先在数组中查找要插入的点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;
3.15移动文本信息:
首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是行移动,否则提示未找到要移动的信息;
3.16删除文本信息:
首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;
4结语
本实验通过对文件数据的操作,主要考查了一下几个方面的知识:
1、对文件的基本操作,包括数据的读取和重新写入;
2、要求掌握对数组的熟练运用,包括数组的,查找,替换,删除,插入等;
3、重点要求掌握在函数调用。
通过对本实验的学习,熟练掌握了以上的知识,我们才能继续进行以后的程序学习。
附件:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
intindex(chars1[],chars2[])//查找
{inti=0,j,m,f=0;
while(s1[i]!
='\0')
{
m=i;
j=0;
while(s2[j]!
='\0')
if(s1[m]!
=s2[j])
break;
else
{
m++;
j++;
}
if(s2[j]=='\0')
return(i);
else
i++;
}
return(-1);
}
voidth(chars[],chart[],charr[])//替换
{intj,p,m,n,i=1,a=1;
while(index(s,t)!
=-1)
{
i=index(s,t);
p=strlen(s);
m=strlen(t);
n=strlen(r);
if(i<0)
break;
elseif(m>n)
{
for(j=i+m;j<=p;j++)
s[j-m+n]=s[j];
}
elseif(m { for(j=p;j>=i+m;j--) s[j-m+n]=s[j]; } for(j=0;j s[i+j]=r[j]; s[p-(m-n)]='\0';} printf("运行后数据为: \n"); puts(s); } voidcr(chars1[],chars2[],inti)//插入 { intk,l1,l2; l1=strlen(s1); l2=strlen(s2); for(k=l1-1;k>=i-1;k--) { s1[l2+k]=s1[k]; } for(k=0;k { s1[i-1+k]=s2[k]; } s1[l1+l2-1]='\0'; printf("运行后数据为: \n"); puts(s1); } voidshanchu(chars1[],chars2[])//删除 {intn=1,s,m,i; while(index(s1,s2)! =-1) {n=index(s1,s2); s=strlen(s1); m=strlen(s2); for(i=n;i<=s;i++) s1[i]=s1[i+m];} printf("运行后数据为: \n"); puts(s1); } voidyidong(chars[],chart[],inti)//移动 { intn,a,m,f; n=index(s,t); a=strlen(s); m=strlen(t); for(f=n;f<=a;f++) s[f]=s[f+m]; cr(s,t,i); } voidmain() { chars[100]; inti=0,n=0,q,c,f=0; charch,a[100],r[100],m[100],t[100],y='y'; FILE*fp; fp=fopen("d: \\k4.txt","r+"); while(! feof(fp))//读取数据 { ch=fgetc(fp); s[i++]=ch; } s[i]='\0'; printf("原文本内容为: \n"); puts(s);//读盘 while(y=='y'||y=='Y') { printf("********************\n"); printf("1、查找与替换\n"); printf("2、插入\n"); printf("3、块移动\n"); printf("4、删除\n"); printf("********************\n"); printf("请选择(1~4): "); scanf("%d",&c); getchar(); switch(c) { case1: printf("输入查找的数据: \n"); gets(a); if(index(s,a)! =-1) printf("找到\n"); else {printf("找不到! ! ! \n");break;} printf("输入要替换的数据: \n"); gets(r); th(s,a,r);break;//替换 case2: printf("输入要插入的数据: \n"); gets(m); printf("输入要插入的位置: \n"); scanf("%d",&q); cr(s,m,q);getchar();break;//插入 case3: printf("输入要移动的数据: \n"); gets(t); if(index(s,t)==-1)break; printf("输入要移动的位置: \n"); scanf("%d",&q); yidong(s,t,q); getchar(); break; case4: printf("输入要删除的数据: \n"); gets(t); if(index(s,t)! =-1) printf("找到\n"); else printf("找不到! ! ! \n"); shanchu(s,t); break; } printf("********************\n"); printf("是否继续: Y/N\n"); scanf("%c",&y); } rewind(fp);//指针复位 fputs(s,fp);//存盘 fclose(fp);} 运行结果: 任务总结: 这是不成功的课程设计有待提高,本来想用链表来实现,但最后百般调试仍无结果,不能脱离C语言下数组长度的有限性。 我只能无奈的宣布失败,知道自己所学胜少,能力范围,只能这样。 。 。 课程设计成绩评定表 出勤 情况 出勤天数 缺勤天数 成 绩 评 定 出勤情况及设计过程表现(20分) 论文(20分) 设计成果(60分) 总成绩(100分) 综 合 评 定 指导教师签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 文本 编辑器