简单的文本编辑器
今天应同学的需求写了一个文本编辑器可以简单的时间文本的打开、删除、显示、查找、插入的简单功能
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.微信红包,微信扫一扫即可领取红包
微信扫一扫,每天领取微信红包
小礼物走一走,来简书关注我