c简易文本编辑器tt.docx
《c简易文本编辑器tt.docx》由会员分享,可在线阅读,更多相关《c简易文本编辑器tt.docx(22页珍藏版)》请在冰豆网上搜索。
c简易文本编辑器tt
课题46:
简易文本编辑器(2人)。
要求:
1)具有图形菜单界面;
2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;
3)可正确存盘、取盘;
4)正确显示总行数。
#include
#include
#include
#include
#defineMAX10000
#define_CRT_SECURE_NO_DEPRECATE在/vs中取消warning的警告
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]=\;//文本编辑域
charname[20]=\;//文件保存的位置
intstatus=0;//显示是否保存过的状态
intntext;//文本编辑的位置
voiddakai(chartext[])
{
system(cls);
FILE*fp;
charpd,ch;
charname[30];
inti=0;
牰湩晴尨输入A:
确定打开文件(未保存的数据将会丢失)M:
返回主菜单);fflush(stdin);
pd=getchar();
if(pd=='A'||pd=='a')
{
牰湩晴尨请输入要打开文件名字(例如c:
\\a.txt));scanf(%s,name);
while((fp=fopen(name,
))==NULL)
{
printf(\
打开文件失败,请重新输入要打开的文件名:
);
scanf(%s,name);
}cs(text);while(!
feof(fp))
{ch=fgetc(fp);text[i]=ch;
i;
}text[i]='\0';ntext=i;fclose(fp);printf(\文件读取成功\n文件内容为\n);
dayin(text);
}if(pd=='M'||pd=='m')menu();
}
voidbc(chartext[])
{system(cls);
FILE*fp;charpd;chartmp;inti;
printf(\
输入【A】保存;任意键返回主菜单不保存\n);fflush(stdin);
pd=getchar();
if(!
(pd=='A'||pd=='a')){menu();
else
{
if(name[20]==NULL)
{
printf(\
请输入保存文件名(例如:
c:
\\a.txt):
);
scanf(%s,name);
}
while((fp=fopen(name,w))==NULL)
{
牰湩晴尨文件不存在,请重新输入文件名:
);scanf(%s,name);
}
printf(\
A:
确定;B:
取消:
);
while(scanf(%c,&tmp)!
=EOF)
{
if(tmp=='A'||tmp=='a')
{
for(i=0;ifprintf(fp,%c,text[i]);fclose(fp);
status=1;
printf(\
文件保存成功\n);
break;
}
if(tmp=='B'||tmp=='b')
{
break;
}
}
}
}
voidcs(chartext[])
{
inti;
for(i=0;i{
text[i]='\0';
}
ntext=0;
status=0;
}
intstrindex(chartext[],chart[],inti2,intl)//查找要操作的数据的
位置(模式匹配)
{
inti1=l,j=0;
while(i1{
if(text[i1]==t[j])//继续匹配下一个字符
{
j;
i1;
//主串和子串依次匹配下一个字符
}
else//主串、子串指针回溯重新开始下一次匹配
{
i1=i1-j1;//主串从下一个位置开始匹配
j=0;
//子串从头开始匹配
}
}
if(j>=i2)
{
return(i1-i2);
}//返回匹配的第一个字符的下标
else
return(-1);//模式匹配不成功
}
voidmenu()
{
system(cls);
time_ttimep;
time(&timep);
printf(%s,ctime(&timep));
printf(\
\n\n\n\n\n\n\n\n\t\t\tWelcomtouseourTXTeditionsystem!
\n);
printf(\
\n\t\t\t欢迎您使用文本编辑器软件!
\n);
printf(\
\n\n\n\n\n\n\n\npressEntertocontinue...\n);getchar();
loop:
system(cls);
printf(\
\n\n\n\t\t******************printf(\\t\t\t0.
printf(\\t\t\t1.
if(ntext==0){
简易文本编辑器*****************\n\n);清空内容--\n);打开文件--\n);
default:
break;
}
}
else
{
printf(\
输入有误,请重新输入:
);
fflush(stdin);
n=getchar();
}
system(pause);
gotoloop;
}
voidchazhao(chartext[],intl)
{
system(cls);
inti,t,a=-1;
charpattern[20],bd,pd;牰湩晴尨原文为:
\n);
dayin(text);牰湩晴尨请输入您要查找的内容);scanf(%s,pattern);
牰湩晴尨您查找的内容是:
%s\n,pattern);t=strlen(pattern);
loop:
a=strindex(text,pattern,t,l);
if(a!
=-1)
{
l=at;
}
inths=1,ls=0;
for(i=0;i<=a;i)
{
ls;
if(text[i]=='\n')
{
hs;ls=0;
}
}
if(a==-1)
牰湩晴尨查找到结尾没有找到\n输入R将重头查找;任意键返回主菜单);l=0;
fflush(stdin);pd=getchar();
}
else
{
牰湩晴尨已经找到在第%c行第,输入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);牰湩晴尨现在文本的内容为:
\n);
printf(%s\n,text);
inths=1,i;
for(i=0;i{
if(text[i]=='\n')
{
hs;
}
}printf(\
文本共有%(行\n,hs);
}
voidshuru(chartext[])
{system(cls);
牰湩晴尨请输入内容(输入@结束输入并返回主菜单):
\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--;
}
牰湩晴尨统计:
文本一共有%并字符,%曲亍,本次输入了%c个字符,%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(\
输入【A】执行查找删除内容;任意键返回主菜单:
);
fflush(stdin);
px=getchar();
if(px=='a'||px=='A')
{
printf(\
输入您要删除的内容,以@结束:
);
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)
{
牰湩晴尨已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;其他键将返回主菜单:
);
l=0;
fflush(stdin);
pdx=getchar();
}
else
{
牰湩晴尨你要删除的内容在第%c行第%d列\n输入【A】确定:
hs,ls);其他键将返回主菜单;】寻找下个词B输入【;删除.
fflush(stdin);
pd=getchar();
l=t2a;
if(pd=='a'||pd=='A')
{
for(i=a;i{
}
}
loop:
inths=1,ls=0;
for(b=0;b{
ls;
if(text[b]=='\n')
{
hs;
ls=0;
}
}
if(a==-1)
{
printf(\
查找到结尾没有找到插入点,输入【R】查找其他;按其他键返回菜单:
\n);
l=0;
fflush(stdin);
d=getchar();
fflush(stdin);
}
else
{
printf(\
您要插入的位置是第%出亍,第%4列之前\n【A】.不是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择:
hs,ls1);
fflush(stdin);
pd=getchar();
if(pd=='a'||pd=='A')
{
l=at;
gotoloop;
}
elseif(pd=='b'||pd=='B')
{
);
结束:
@以,输入您要插入的内容printf(\
\n
fflush(stdin);
while((c=getchar())!
='@')
{
if(c=='@')
{
break;
}
else
{x[t2]=c;t2;continue;
}
for(i=ntext;i>=a;i--){
text[it2]=text[i];
}
for(i=0;i{
text[ia]=x[i];
ntext=ntextt2;
printf(\
getchar();
}
}
当前文本信息为:
\n);for(i=0;i<=ntext-1;i)
printf(%c,text[i]);printf(\
文本插入成功\n);fflush(stdin);
}
if(d=='r'||d=='R')
{
l=0;
charu(text,l);
}
status=0;
//
voidtihan(charp[],intl)
{
intt=0,t1=0,i,a,b;
charc,th[20],d,d1,bth[20];
inti2;system(cls);printf(\当前文本信息为:
\n);
for(i2=0;i2<=ntext-1;i2)printf(%c,p[i2]);
printf(\
输入要被替换的内容,以@结束:
);
fflush(stdin);
while((c=getchar())!
='@')//t{if(c=='@')
{
break;
}else{bth[t]=c;t;
continue;
}
}loop:
a=strindex(p,bth,t,l);//
inths=1,ls=0;
for(b=0;b{
ls;
if(p[b]=='\n')
{
hs;
ls=0;
}
}
if(a==-1)
内容替换
指替换前内容的长度
查找要被替换的内容的位置
{printf(\
查找到结尾没有找到要被替换的内容\n输入【F】查找其他内容,按其他键返回主菜单键\n);
l=0;
d=getchar();
fflush(stdin);
}
else
{printf(\
\n已经找到要查找的数据在第%c行第%d列\n输入【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:
hs,ls1);
fflush(stdin);
l=ta;
charpd;pd=getchar();
if(pd!
='a'&&pd!
='A')
{printf(\是否要替换该内容?
\nA:
替换给内容;其他键返回主菜单\n请选择:
);fflush(stdin);d1=getchar();
if(d1=='a'||d1=='A')
{
printf(\输入要替换的内容,以@结束:
);
fflush(stdin);
while((c=getchar())!
='@')//t1指替换后的内容长度
{
if(c=='@')
{
break;
}
else
{
th[t1]=c;
t1;
continue;
}
}
{
for(i=0;ip[ia]=th[i];
}
else
{
if(t>t1)
{
for(i=0;i{
p[ia]=th[i];
}
for(i=at1;i{
p[i]=p[it-t1];
}
ntext=ntextt1-t;
}
else
{
for(i=ntext;i>=a;i--)
{
p[it1-t]=p[i];
}
for(i=0;i{
p[ia]=th[i];
}
ntext=ntextt1-t;
}
}
牰湩晴尨替换成功);printf(\当前文本信息为:
\n);
for(i2=0;i2<=ntext-1;i2)printf(%c,p[i2]);getchar();
status=0;
}
}else
gotoloop;
}if(d=='r'||d=='R')tihan(text,l);
}
voidtuichu(intstatus)
{
charpd;
if(status)
exit(0);
else
牰湩晴尨还未保存文件,确定退出?
(Q.直接退出;丫.保存后退出);
fflush(stdin);
pd=getchar();
if(!
(pd=='Q'||pd=='q'))
bc(text);
exit(0);
}
intmain()
{
menu();
return(0);
}