数据结构 简易文本编辑器由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据结构文本编辑器”。
题目:
【2】.简易文本编辑器 要求:
1)具有图形菜单界面;
2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除
3)可正确存盘、取盘; 4)正确显示总行数。
1需求分析
一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。
2概要设计
为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息:
⑴ 清空以前的文本信息:将用数组存的数据内容全部置为0;
⑵ 显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上; ⑶ 编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,这个整型变量用于记录一维数组中存入数据的个数; ⑷ 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;
⑸ 插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;
⑹ 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息; ⑺ 删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;
⑻ 退出编辑器:显示感谢使用该软件并退出。详细设计
void menu();
void shuru(char text[]);void bc(char text[]);
void dakai(char text[]);void dayin(char text[]);void chazhao(char text[],int l);void tihan(char text[],int l);int strindex(char text[],char t[],int i2,int l);void shanchu(char p[],int l);void cs(char text[]);void charu(char text[],int l);void tuichu(int status);char text[MAX]=“”;//文本编辑域 char name[20]=“”;//文件保存的位置 int status=0;//显示是否保存过的状态 int ntext;
//文本编辑的位置
4用户使用说明
⑴ 清空以前的文本信息:将用数组存的数据内容全部置为0;
⑵ 显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上; ⑶ 编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,这个整型变量用于记录一维数组中存入数据的个数; ⑷ 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;
⑸ 插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;
⑹ 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息;⑺ 删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;
⑻ 退出编辑器:显示感谢使用该软件并退出。
5调试分析 /测试结果
文本编辑器主界面
主界面功能,如图2—2所示。
图2—2 文本编辑器主界面
系统功能
⑴ 输入文本信息功能,如图2—3所示。
图2—3 输入界面
⑵ 查找文本信息,如图2—4所示。
图2—4查到功能界面⑶ 显示文本信息,如图2—5。
图2—5 {4}删除操作,如图2--6
图2—6(删除123)功能{5}插入操作
如图2—7所示。
图2—7(在789前插入123)界面 {6}替换文本内容,如图2—8所示。
图2—8(替换456为abc)的内容 6心得体会
程序的运行结果与理论推导结果完全吻合,即该算法与程序设计满足课程设计要求。该程序的主要优点是简单易懂,不存在理解上的障碍,也很自然地能想到这种解法。通过数据结构的课程设计使我们对所学知识有了更好的理解,也增强了大家的动手能力。同时也发现了自己的很多不足之处,对知识的应用能力很是欠缺,应用软件的能力及编程水平与课程要求更是存在很大的差距。
7程序
#include #include #include #include #define MAX 10000 #define _CRT_SECURE_NO_DEPRECATE void menu();
void shuru(char text[]);void bc(char text[]);
void dakai(char text[]);void dayin(char text[]);void chazhao(char text[],int l);void tihan(char text[],int l);int strindex(char text[],char t[],int i2,int l);void shanchu(char p[],int l);void cs(char text[]);void charu(char text[],int l);void tuichu(int status);char text[MAX]=“”;//文本编辑域 char name[20]=“”;//文件保存的位置 int status=0;int ntext;//显示是否保存过的状态
//文本编辑的位置
//在vs中取消warning的警告
void dakai(char text[]){
system(“cls”);
FILE *fp;char pd,ch;char name[30];int i=0;printf(“输入A:确定打开文件(未保存的数据将会丢失)M:返回主菜单”);fflush(stdin);pd=getchar();if(pd=='A'||pd=='a'){
printf(“请输入要打开文件名字(例如c:a.txt)”);
scanf(“%s”,name);
while((fp=fopen(name,“r”))==NULL)
{
printf(“n打开文件失败,请重新输入要打开的文件名:”);
scanf(“%s”,name);
}
cs(text);
while(!feof(fp))
{
ch=fgetc(fp);
text[i]=ch;
i++;
}
text[i]=' ';
ntext=i;
fclose(fp);
printf(“n文件读取成功n文件内容为n”);
dayin(text);
} if(pd=='M'||pd=='m')
menu();
} void bc(char text[]){ system(“cls”);FILE *fp;char pd;char tmp;int i;printf(“n输入【A】保存;任意键返回主菜单不保存n”);
fflush(stdin);pd=getchar();if(!(pd=='A'||pd=='a')){
menu();} else
{
if(name[20]==NULL)
{
printf(“n请输入保存文件名(例如: c:a.txt):”);scanf(“%s”,name);
}
while((fp=fopen(name,“w+”))==NULL)
{
printf(“文件不存在,请重新输入文件名:”);
scanf(“%s”,name);
}
printf(“nA:确定;B:取消:”);
while(scanf(“%c”,&tmp)!=EOF)
{
if(tmp=='A' || tmp=='a')
{
for(i=0;i
fprintf(fp,“%c”,text[i]);
fclose(fp);
status=1;
printf(“n文件保存成功n”);
break;
}
if(tmp=='B' || tmp=='b')
{
break;
}
} } } void cs(char text[]){ int i;for(i=0;i
text[i]=' ';} ntext=0;status=0;}
int strindex(char text[],char t[],int i2,int l)//查找要操作的数据的位置(模式匹配){ int i1=l,j=0;while(i1
if(text[i1]==t[j])//继续匹配下一个字符
{ j++;
i1++;
//主串和子串依次匹配下一个字符
}
else
//主串、子串指针回溯重新开始下一次匹配
{
i1=i1-j+1;
//主串从下一个位置开始匹配
j=0;
//子串从头开始匹配
} } if(j>=i2){
return(i1-i2);}
//返回匹配的第一个字符的下标
else return(-1);
//模式匹配不成功
} void menu(){ system(“cls”);time_t timep;
time(&timep);printf(“%s”,ctime(&timep));printf(“nnnnnnnnntttWelcom to use our TXT edition system!n”);printf(“nnttt
欢迎您使用文本编辑器软件!n”);printf(“nnnnnnnnnpre Enter to continue...n”);getchar();loop: system(“cls”);printf(“nnnntt******************简易文本编辑器*****************nn”);printf(“tttt----0.清空内容--n”);printf(“tttt----1.打开文件--n”);if(ntext==0){
printf(“tttt----2.输入内容--n”);}
else { printf(“tttt----2.继续输入--n”);} printf(“tttt----3.查找------n”);printf(“tttt----4.插入------n”);printf(“tttt----5.删除------n”);printf(“tttt----6.替换------n”);printf(“tttt----7.显示内容--n”);printf(“tttt----8.保存------n”);printf(“tttt----9.退出------n”);
printf(“ntt*********************选项************************n”);printf(“ntttt输入选项0-9:”);char n;
fflush(stdin);n=getchar();if(n>='0'&&n
switch(n)
{
case '0': cs(text);break;
case '1': dakai(text);break;
case '2': shuru(text);break;
case '3': chazhao(text,0);break;
case '4': charu(text,1);break;
case '5': shanchu(text,0);break;
case '6': tihan(text,0);break;
case '7': dayin(text);break;
case '8': bc(text);break;
case '9': tuichu(status);
default : break;
} } else {
printf(“n输入有误,请重新输入:”);
fflush(stdin);
n=getchar();} system(“pause”);
goto loop;}
void chazhao(char text[],int l){ system(“cls”);int i,t,a=-1;char pattern[20],bd,pd;printf(“原文为:n”);dayin(text);printf(“请输入您要查找的内容”);scanf(“%s”,pattern);printf(“您查找的内容是:%sn”,pattern);t=strlen(pattern);loop: a=strindex(text,pattern,t,l);if(a!=-1){
l=a+t;} int hs=1,ls=0;for(i=0;i
ls++;
if(text[i]=='n')
{
hs++;ls=0;
} } if(a==-1)
{
printf(“查找到结尾没有找到n输入【R】将重头查找;任意键返回主菜单”);
l=0;
fflush(stdin);
pd=getchar();
} else
{
printf(“已经找到在第%d行第%d列,输入【R】继续查找下一处;任意键返回主菜单”,hs,ls);
fflush(stdin);
bd=getchar();
if(bd=='R'||bd=='r')
goto loop;
}
if(pd=='R'||pd=='r')
{l=0;chazhao(text,l);} } void dayin(char text[]){ system(“cls”);printf(“现在文本的内容为:n”);printf(“%sn”,text);
int hs=1,i;
for(i=0;i
if(text[i]=='n')
{
hs++;
}
} printf(“n文本共有%d行n”,hs);} void shuru(char text[]){ system(“cls”);printf(“请输入内容(输入@结束输入并返回主菜单):n”);printf(“%s”,text);char c;int i=ntext,j=ntext;fflush(stdin);
while((c=getchar())!='@'){
text[i]=c;
i++;
ntext=i;
continue;}
int cout=0,zf=0,h=1,hs=1,zfs=0;
for(;cout
{
zf++;
if(text[cout]=='n')
{h++;zf--;}
if(text[cout]==' ')
zf--;
}
for(cout=j;cout
{
zfs++;
if(text[cout]=='n')
{hs++;zfs--;}
if(text[cout]==' ')
zfs--;
} printf(“统计:文本一共有%d个字符,%d行,本次输入了%d个字符,%d行n”,zf,h,zfs,hs);} void shanchu(char p[],int l){ int i,a=-1,t2=0;char x[20],px,pd,pdx,c;system(“cls”);printf(“%s”,p);printf(“n输入【A】执行查找删除内容;任意键返回主菜单:”);fflush(stdin);px=getchar();
if(px=='a'||px=='A'){
printf(“n输入您要删除的内容,以@结束:”);
fflush(stdin);
while((c=getchar())!='@')
{
if(c=='@')
{
break;
}
else
{
x[t2]=c;
t2++;
continue;
} } loop:
a=strindex(p,x,t2,l);
int hs=1,ls=0;for(i=0;i
{
ls++;
if(p[i]=='n')
{
hs++;ls=0;
}
}
if(a==-1)
{
printf(“已查找结束,您要删除的内容不存在n输入【R】重新输入要删除的内容;其他键将返回主菜单:”);
l=0;
fflush(stdin);pdx=getchar();
}
else
{
printf(“你要删除的内容在第%d行第%d列n 输入【A】确定删除;输入【B】寻找下个词;其他键将返回主菜单:”,hs,ls);
fflush(stdin);
pd=getchar();
l=t2+a;
if(pd=='a'||pd=='A')
{
for(i=a;i
{
p[i]=p[i+t2];
}
ntext=ntext-t2;
printf(“删除成功,删除后的内容为:n%sn”,text);
}
else if(pd=='b'||pd=='B')
goto loop;
}
if(pdx=='r'||pdx=='R')shanchu(text,l);} } void charu(char text[],int l)
//向文本中插入内容 {
system(“cls”);int i=0,t=0,t2=0,a=-1,b;char cr[20]=“”,pd,x[500],c,d;printf(“n当前文本信息为:n”);printf(“%s”,text);printf(“n输入您要在哪个内容前插入,以@结束:”);fflush(stdin);while((c=getchar())!='@')
//用一个数组接收要插入在哪个内容之前
{
if(c=='@')
{
break;
}
else
{
cr[t]=c;
t++;continue;
} } loop: a=strindex(text,cr,t,l);
//查找并返回要插入的位置点
int hs=1,ls=0;for(b=0;b
ls++;
if(text[b]=='n')
{
hs++;
ls=0;
} } if(a==-1){
printf(“n查找到结尾没有找到插入点,输入【R】查找其他;按其他键返回菜单:n”);
l=0;
fflush(stdin);
d=getchar();
fflush(stdin);} else {
printf(“n您要插入的位置是第%d行,第%d列之前n【A】.不是此位置向后继续找插入点n【B】.在此位置插入n按其他键返回菜单n请选择:”,hs,ls+1);
fflush(stdin);
pd=getchar();
if(pd=='a'||pd=='A')
{
l=a+t;
goto loop;
}
else if(pd=='b'||pd=='B')
{
printf(“nn输入您要插入的内容,以@结束:”);
fflush(stdin);
while((c=getchar())!='@')
{
if(c=='@')
{
break;}
else
{
x[t2]=c;
t2++;
continue;
}
}
for(i=ntext;i>=a;i--)
{
text[i+t2]=text[i];
}
for(i=0;i
{
text[i+a]=x[i];
}
ntext=ntext+t2;
printf(“n当前文本信息为:n”);
for(i=0;i
printf(“%c”,text[i]);
printf(“n文本插入成功n”);
fflush(stdin);
getchar();
} }
if(d=='r'||d=='R'){
l=0;charu(text,l);} status=0;} void tihan(char p[],int l)
//内容替换 { int t=0,t1=0,i,a,b;char c,th[20],d,d1,bth[20];int i2;system(“cls”);printf(“n当前文本信息为:n”);for(i2=0;i2
fflush(stdin);while((c=getchar())!='@')
//t指替换前内容的长度
{
if(c=='@')
{
break;
}
else
{
bth[t]=c;
t++;
continue;} } loop: a=strindex(p,bth,t,l);
//查找要被替换的内容的位置
int hs=1,ls=0;for(b=0;b
ls++;
if(p[b]=='n')
{
hs++;
ls=0;
} } if(a==-1){
printf(“n查找到结尾没有找到要被替换的内容n输入【R】查找其他内容,按其他键返回主菜单键n”);
l=0;
d=getchar();fflush(stdin);} else {
printf(“nn已经找到要查找的数据在第%d行第%d列n输入【A】继续向后查找相同内容n输入其他键将进行替换操作n请选择:”,hs,ls+1);
fflush(stdin);
l=t+a;char pd;
{
pd=getchar();if(pd!='a'&&pd!='A')printf(“n是否要替换该内容?nA:替换给内容;其他键返回主菜单n请选择:”);fflush(stdin);d1=getchar();if(d1=='a'||d1=='A'){ printf(“n输入要替换的内容,以@结束:”);
fflush(stdin);
while((c=getchar())!='@')
{
if(c=='@')
{
break;
}
else
{
th[t1]=c;
t1++;
continue;
}
}
if(t==t1)
进行长度比较
{
for(i=0;i
p[i+a]=th[i];
}
else
{
if(t>t1)
{
for(i=0;i
{
p[i+a]=th[i];
}
for(i=a+t1;i
{
p[i]=p[i+t-t1];
}
ntext=ntext+t1-t;
} else
//t1指替换后的内容长度
//将要被替换的内容和替换后的内容12
{
for(i=ntext;i>=a;i--)
{
p[i+t1-t]=p[i];
}
for(i=0;i
{
p[i+a]=th[i];
}
ntext=ntext+t1-t;
}
}
printf(“替换成功”);
printf(“n当前文本信息为:n”);
for(i2=0;i2
printf(“%c”,p[i2]);
getchar();
status=0;
}
} else
goto loop;} if(d=='r'||d=='R')tihan(text,l);} void tuichu(int status){ char pd;if(status)
exit(0);else
printf(“还未保存文件,确定退出?(Q.直接退出;Y.保存后退出”);
fflush(stdin);pd=getchar();if(!(pd=='Q'||pd=='q'))
bc(text);exit(0);} int main(){ menu();return(0);}
西华大学数学与计算机学院上机实验报告西华大学数学与计算机学院上机实验报告课程名称: linux操作系统指导教师:刘世林上机实验名称:vi编辑器上机实验编号:年级:级 姓名:学号: 组号......
数据结构】二叉排序树的建立,查找,插入和删除实践题 /*sy53.c*/#include #include typedef int KeyType;typedef struct node{KeyType key;struct node *lchild,*rchild;}BSTN......
实验:线性表的基本操作【实验目的】学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。对顺序表建立、插入、删除的基本操作,对单链表建立、插入、删除的基本操作算法......
MP3歌词编辑器 LRCEDIT所谓LRC歌词是指与播放的MP3歌曲同步显示的歌词,对于音文秀VT3100还包括与外语语音同步播放的文字。LRC歌词制作实质上是把歌词或文字,与歌曲或语音建立......
Photoshop里等高线是Photoshop软件中将像素图里同一明度的像素为之等高,归为一线。等高线编辑器是Photoshop软件中图层样式里对阴影或光泽的明度调节工具。 [PS里,滤镜和图层......