c 简易文本编辑器 t t
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课题46:简易文本编辑器(2人)。要求:
1) 具有图形菜单界面;
2) 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;
3) 可正确存盘、取盘;
4) 正确显示总行数。
#include
#include
#include
#include
#define MAX 10000
#define _CRT_SECURE_NO_DEPRECATE //在vs中取消warning的警告
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; //文本编辑的位置
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]='\0';
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]='\0'; } 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("\n\n\n\n\n\n\n\n\n\t\t\tWelcom to use our TXT edition system!\n"); printf("\n\n\t\t\t 欢迎您使用文本编辑器软件!\n"); printf("\n\n\n\n\n\n\n\n\npress Enter to continue...\n"); getchar();