实现一个基于命令行文本编辑器【一】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实现一个基于命令行的文本编辑器
选择本项目作业的同学,必须本人独立完成。
功能:
1、打开文件
2、保存文件
3、能够对文件进行查找
4、能够对文件进行替换
5、能够对文件进行删除
要求:
1、不能使用Cstring.h,string等类,只能使用char* 来处理字符串
2、能够动态的申请和分配内存
上交的内容:
1、.cpp、.h、.exe文件
2、文件命名规则:学号.cpp 学号.h 学号.exe
程序具体要求:
1、在命令行下运行学号.exe 出现界面如下
2、按输入参数
a)-o filename 打开文件
b)–h 帮助信息,提示各个参数的格式和含义
c)–s filename 保存文件到filename指定的路径和文件名
d)–f stringtofind 查找stringtofind字符串,并将查到的字符串
的个数在屏幕上显示,并将个数写到文件学号_result.txt中,路径和最后-s
中的filename同一个路径
e)–r sourcestring targetstring 替换字符串,将文件中的sourcestring替换成
targetstring,将替换多少处显示在屏幕上,并将替换的个数和替换后的文本都写
道学号_result.txt中,路径要求同上
f)–d stringtodelete 删除字符串,将文件中的stringtodelete删除,
将删除多少处显示在屏幕上,并将删除的个数和删除后的文本都写到学号
_result.txt中,路径要求同上
g)–q 退出程序
3、当前文件的问题:
sample:
打开了c:\aaa.txt
在-d 删除之后,再执行-r时是要在原来的aaa.txt上进行-r操作,即不受-d的影响
一旦执行了-s
当前的文件就变成了-s保存的结果
如:打开c:\aaa.txt
在-d 删除之后,执行了-s
再执行-r时就是要在删除之后的文本上进行-r操作了
4、学号_result.txt
这个文件每次写都是在文件的最后追加,不要覆盖原来的内容
要求所有的次数独占一行,写法为:-f10 -r29 -d3
所有的文本写完后空两行
sample:
源代码下载:/2013/01/04/169/
#include "stdio.h"
#include "stdlib.h"
struct line{
char text[81];
int num; /*行号*/
struct line *next; /*指向下一个输入项目的指针*/
struct line *prior; /*指向前一个项目的指针*/
};
struct line *start; /*指向表中第一个项目的指针*/ struct line *last; /*指向表中作后一个项目的指针*/ struct line *find(int),*dls_store(struct line *);
void patchup(int,int),delete_text(),list(),save(char *),load(char *); menu_select();
enter(int linenum);
void main(int argc,char *argv[])
{
char s[80],choice,fname[80];
// struct line *info;
int linenum=1;
start=NULL;
last=NULL;
if(argc==2) load(argv[1]);/*装入命令行上的文件*/
do{
choice=menu_select();
switch(choice){
case 1:printf("\t行号:");
gets(s);
linenum=atoi(s);
enter(linenum);
break;
case 2:delete_text();
break;
case 3:list();
break;
case 4:printf("\t文件名:");
gets(fname);
save(fname);
break;
case 5:printf("\t文件名:");
gets(fname);
load(fname);
break;
case 6:exit(0);
}
}while(1);
}
/* 显示菜单,供用户选择*/
menu_select()
{
char s[80];
int c;
printf("\t\t1.输入\n");
printf("\t\t2.删除一行\n");
printf("\t\t3.显示一行\n");
printf("\t\t4.文件存盘\n");
printf("\t\t5.装入文件\n");
printf("\t\t6.退出\n");
do{
printf("\n\n\t\t请按数字选择:");
gets(s);
c=atoi(s);
}while(c<0||c>6);
return(c);
}
/*将文本插在指定行端部*/
enter(int linenum)
{
struct line *info;
//char t[81];
for(;;){
/* */
info=(struct line *)malloc(sizeof(struct line));
if(!info){
printf("\t! 内存不够!\n");
return(NULL);
}
printf("%d:",linenum);
gets(info->text);
info->num=linenum;
if(*info->text){
if(find(linenum)) patchup(linenum,1);
if(*info->text) start=dls_store(info);
}
else break;
linenum++;
}
return(linenum);