实现一个基于命令行文本编辑器【一】

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档