今天应同学的需求写了一个文本编辑器可以简单的时间文本的打开、删除、显示、查找、插入的简单功能
C语言代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
#define MAX 10000
#include <string.h>
/*函数原型*/
void menu();
void shuru(char text[]);
void bc(char text[]);
void dakai(char text[]);
void dayin(char text[],int k);
void chazhao(char text[],int l);
int strindex(char s[],char t[],int l);
void shanchu(char p[],int l,char pd);
void cs(char text[]);
void charu(char text[],int l);
int ntext;
/*主函数*/
void main()
{
menu();}
/*打开文件模块*/
void dakai(char text[])
{system("cls"); FILE *fp;int l;char ch,pd;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);fp=fopen(name,"r");if(fp==NULL)
{printf("打开文件失败\n");system("PAUSE"); }else
{cs(text);while(!feof(fp)){
ch=fgetc(fp);
text[i]=ch;i++; }
text[i]='\0'; ntext=i; fclose(fp);printf("文件读取成功\n文件内容为\n");dayin(text,1);
printf("如果需要修改请输入7:");
if (pd=='7')
charu(text,l);}
}else (pd=='M'||pd=='m');
menu();
}
/*保存模块*/
void bc(char text[])
{system("cls");FILE *fp;char name[80];char pd,pdx;char tmp;int i;pd=getchar();printf("返回主菜单不保存输入A;任意键保存"); fflush(stdin);pdx=getchar();if (pdx=='A'||pdx=='a'){
menu(); }else { printf("请输入保存文件名(例如: c:\\a.txt):");scanf("%s",name);fp=fopen(name,"w+");if (fp==NULL){
printf("文件创建失败");
system("PAUSE");}else {printf("A:保持;B:取消");
while(scanf("%c",&tmp)!=EOF)
{
if (tmp=='A' || tmp=='a')
{
for(i=0;i<ntext;i++){
fprintf(fp,"%c",text[i]); }
fclose(fp);
printf("A.直接退出程序;任意键继续运行程序");
fflush(stdin);
pd=getchar();
if (pd=='A'||pd=='a'){exit(0); }break; }
if (tmp=='B' || tmp=='b'){break;} }}
}if (pd=='M'||pd=='m')
menu(); }
/*初始化模块*/
void cs(char text[])
{int i;char pd;
pd=getchar();
for (i=0;i<ntext;i++){text[i]='\0';}ntext=0;
if (pd=='M'||pd=='m')
menu(); }
/*菜单显示模块*/
void menu()
{system("cls");time_t timep; time (&timep);printf("%s",ctime(&timep)); printf("***************简单的文本编辑器*********************\n");printf("*** 0.清空文本内容 ***\n");if (ntext==0){printf("*** 1.输入文本内容 ***\n");} else {printf("*** 1.继续输入 ***\n");}printf("*** 2.打开文本内容 ***\n");printf("*** 3.删除文本内容 ***\n");printf("*** 4.查找文本内容 ***\n");printf("*** 5.显示文本内容 ***\n");printf("*** 6.保存文本内容 ***\n");printf("*** 7.插入文本内容 ***\n");printf("*** 8.退出文本内容 ***\n");printf("*** 请输入你的选择(0-9) ***\n");printf("****************************************************\n");printf(" 你的选择是:");char text[MAX];
char n;
ntext=0;while (1)
{
fflush(stdin);fflush(stdin);
n=getchar();
switch (n)
{
case '0': cs(text);break; case '1': shuru(text);break;
case '2': dakai(text);break;case '3': shanchu(text,0,'a');break;case '4': chazhao(text,0);break;
case '5': dayin(text,1);break;
case '6': bc(text);break;case '7': charu(text,1);break;
case '8': exit(0);
case EOF: bc(text);break;
default : break;
}}
}/*查找*/
void chazhao(char text[],int l)
{system("cls");int i,t1,a=-1;char pattern[2],bd;printf("请输入要查找的内容");scanf("%s",pattern);dayin(text,0);printf("您查找的内容是:%s\n",pattern);t1=strlen(pattern);a=strindex(text,pattern,l);if (a!=-1)
{l=a+t1;
}int hs=1;for (i=0;i<=a;i++)
{if (text[i]=='\n')
{hs++; }}if (a==-1)
{printf("查找到结束,没有找到要查找的内容\n重新查找请按--->R;任意键退出");l=0;fflush(stdin);bd=getchar(); }else {printf("已经找到在!第%d行\n继续查找请按--->R;任意键退出",hs);fflush(stdin);bd=getchar();}if (bd=='R'||bd=='r')
{chazhao(text,l); }
if (bd=='M'||bd=='m')
menu();
}
int strindex(char s[],char t[],int l)
{int i,j,k;for(i=l;s[i]!='\0';i++)
{for(j=i,k=0;t[k]!='\0'&&s[j]==t[k];j++,k++)
;if(k>0&&t[k]=='\0')
return j-k;}return -1;
}
/*显示模块*/
void dayin(char text[],int k)
{
char pd;
pd=getchar();printf("%s\n",text); if (k)
{system("PAUSE");} if (pd=='M'||pd=='m')
menu(); }
/*输入模块*/
void shuru(char text[])
{system("cls");printf("输入@结束输入并返回主菜单\n请输入内容\n");printf("%s",text);char c;int i=ntext;fflush(stdin); while ((c=getchar())!='@'){
/*if (c==1)
{
break;
}
else
*/{
text[i]=c;
i++;
ntext=i;
continue;
}}if (c=='$')
bc(text);if(c=='@')
menu();}/*删除*/
void shanchu(char p[],int l,char pd)
{pd=getchar();system("cls");int i,t,a=-1;char pattern[20],px;if (pd=='R'||pd=='r'){printf("输入A: 继续执行查找删除内容 任意键:返回主菜单"); }else {printf("输入A:确定要执行删除 任意键:返回主菜单");}fflush(stdin);px=getchar();if (px=='a'||px=='A'){printf("请输入您要删除的内容");scanf("%s",pattern);dayin(p,0);printf("您要删除的内容是:%s\n",pattern);t=strlen(pattern);a=strindex(p,pattern,l);int hs=1;for (i=0;i<=a;i++){if (p[i]=='\n'){hs++; }}if (a==-1){printf("查找结束 您要删除的内容不存在\n输入R:重新输入要删除的内容");l=0;fflush(stdin);pd=getchar(); }else {printf("你要删除的内容在第%d行\n 输入A.确定删除 输入R:寻找下个词",hs);fflush(stdin);pd=getchar();l=a+t;}if (pd=='a'||pd=='A'){for(i=a;i<ntext;i++){
if(p[a-1]==' ')
{
p[i]=p[i+t+1];}
else if((p[a+t]>=0&&p[a+t]<=64)||(p[a+t]>=91&&p[a+t]<=96)||p[a+t]>122||(p[a-1]>=0&&p[a-1]<=64)||(p[a-1]>=91&&p[a-1]<=96)||p[a-1]>122)
{
p[i]=p[i+t];}
else
{p[i]=p[i+t];}}}else if (pd=='R'||pd=='r'){shanchu(p,l,pd);}if (pd=='a'||pd=='A'){ntext=ntext-t-1;printf("删除结果\n");
dayin(p,1);}free(pattern);}
if (pd=='M'||pd=='m')
menu();
}
/*插入*/
void charu(char p[],int l)
{int i,t,t2,a=-1;char pattern[20],pd,x[500];printf("输入您要在哪个内容前插入:");scanf("%s",pattern);
pd=getchar();t=strlen(pattern);a=strindex(p,pattern,l);int hs=1;for (i=0;i<=a;i++){if (p[i]=='\n'){hs++; }printf("您要插入的位置是第%d行,%s之前,A:不是此位置B:在次位置插入",hs,pattern);fflush(stdin);pd=getchar();if (pd=='a'||pd=='A'){l=a+t;charu(p,l);}else if (pd=='b'||pd=='B')
{ printf("输入您要插入的内容");scanf("%s",x);t2=strlen(x);
for(i=ntext;i>=a;i--)
p[i+t+1]=p[i];
for(i=0;i<t2;i++){
p[i+a-1]=x[i];}
p[i+a-1]=' ';
ntext=ntext+t2;printf("\n");}
}
if (pd=='M'||pd=='m')
menu();
}
运行的结果如下:
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。
既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取
1.支付宝搜索 522398497,或扫码支付宝红包海报。
支付宝扫一扫,每天领取大红包
2.微信红包,微信扫一扫即可领取红包
微信扫一扫,每天领取微信红包
小礼物走一走,来简书关注我