简易文本编辑器.docx
《简易文本编辑器.docx》由会员分享,可在线阅读,更多相关《简易文本编辑器.docx(13页珍藏版)》请在冰点文库上搜索。
![简易文本编辑器.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/ac3ae17d-0611-4880-909b-904a38715747/ac3ae17d-0611-4880-909b-904a387157471.gif)
简易文本编辑器
数据结构课程设计
题目简易文本编辑的探究
系(部)电子与信息工程系
班级
姓名
学号
指导教师王静
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;js[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分)
综
合
评
定
指导教师签名:
年月日