数据结构简易文本编辑器.docx
- 文档编号:6503535
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:12
- 大小:24.59KB
数据结构简易文本编辑器.docx
《数据结构简易文本编辑器.docx》由会员分享,可在线阅读,更多相关《数据结构简易文本编辑器.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构简易文本编辑器
RevisedbyJackonDecember14,2020
数据结构简易文本编辑器
题目:
【2】.简易文本编辑器
要求:
1)具有图形菜单界面;
2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除
3)可正确存盘、取盘;
4)正确显示总行数。
1需求分析
一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。
2概要设计
为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。
顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。
其特点为:
在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。
在编辑器的主界面中应有如下提示信息:
清空以前的文本信息:
将用数组存的数据内容全部置为0;
显示当前文本信息:
遍历用数组存入的信息,并输入到外部显示器上;
编辑信息:
定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,这个整型变量用于记录一维数组中存入数据的个数;
替换文本信息:
首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;
插入文本信息:
首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;
移动文本信息:
首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息;
删除文本信息:
首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;
退出编辑器:
显示感谢使用该软件并退出。
3详细设计
voidmenu();
voidshuru(chartext[]);
voidbc(chartext[]);
voiddakai(chartext[]);
voiddayin(chartext[]);
voidchazhao(chartext[],intl);
voidtihan(chartext[],intl);
intstrindex(chartext[],chart[],inti2,intl);
voidshanchu(charp[],intl);
voidcs(chartext[]);
voidcharu(chartext[],intl);
voidtuichu(intstatus);
chartext[MAX]="";.\n");
getchar();
loop:
system("cls");
printf("\n\n\n\n\t\t******************简易文本编辑器*****************\n\n");
printf("\t\t\t\t----0.清空内容--\n");
printf("\t\t\t\t----1.打开文件--\n");
if(ntext==0){
printf("\t\t\t\t----2.输入内容--\n");
}
else{
printf("\t\t\t\t----2.继续输入--\n");
}
printf("\t\t\t\t----3.查找------\n");
printf("\t\t\t\t----4.插入------\n");
printf("\t\t\t\t----5.删除------\n");
printf("\t\t\t\t----6.替换------\n");
printf("\t\t\t\t----7.显示内容--\n");
printf("\t\t\t\t----8.保存------\n");
printf("\t\t\t\t----9.退出------\n");
printf("\n\t\t*********************选项************************\n");
printf("\n\t\t\t\t输入选项0-9:
");
charn;
fflush(stdin);
n=getchar();
if(n>='0'&&n<='9')
{
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");
gotoloop;
}
voidchazhao(chartext[],intl)
{
system("cls");
inti,t,a=-1;
charpattern[20],bd,pd;
printf("原文为:
\n");
dayin(text);
printf("请输入您要查找的内容");
scanf("%s",pattern);
printf("您查找的内容是:
%s\n",pattern);
t=strlen(pattern);
loop:
a=strindex(text,pattern,t,l);
if(a!
=-1)
{
l=a+t;
}
inths=1,ls=0;
for(i=0;i<=a;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')
gotoloop;
}
if(pd=='R'||pd=='r')
{l=0;chazhao(text,l);}
}
voiddayin(chartext[])
{
system("cls");
printf("现在文本的内容为:
\n");
printf("%s\n",text);
inths=1,i;
for(i=0;i { if(text[i]=='\n') { hs++; } } printf("\n文本共有%d行\n",hs); } voidshuru(chartext[]) { system("cls"); printf("请输入内容(输入@结束输入并返回主菜单): \n"); printf("%s",text); charc; inti=ntext,j=ntext; fflush(stdin); while((c=getchar())! ='@') { text[i]=c; i++; ntext=i; continue; } intcout=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); } voidshanchu(charp[],intl) { inti,a=-1,t2=0; charx[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); inths=1,ls=0; for(i=0;i<=a;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%s\n",text); } elseif(pd=='b'||pd=='B') gotoloop; } if(pdx=='r'||pdx=='R') shanchu(text,l); } } voidcharu(chartext[],intl)是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择: ",hs,ls+1); fflush(stdin); pd=getchar(); if(pd=='a'||pd=='A') { l=a+t; gotoloop; } elseif(pd=='b'||pd=='B') { printf("\n\n输入您要插入的内容,以@结束: "); 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<=ntext-1;i++) printf("%c",text[i]); printf("\n文本插入成功\n"); fflush(stdin); getchar(); } } if(d=='r'||d=='R') { l=0; charu(text,l); } status=0; } voidtihan(charp[],intl)接退出;Y.保存后退出"); fflush(stdin); pd=getchar(); if(! (pd=='Q'||pd=='q')) bc(text); exit(0); } intmain() { menu(); return(0); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 简易 文本 编辑器