实现一个基于命令行的文本编辑器一Word格式文档下载.docx
- 文档编号:6662122
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:25
- 大小:48.25KB
实现一个基于命令行的文本编辑器一Word格式文档下载.docx
《实现一个基于命令行的文本编辑器一Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实现一个基于命令行的文本编辑器一Word格式文档下载.docx(25页珍藏版)》请在冰点文库上搜索。
stdlib.h"
structline{
chartext[81];
intnum;
/*行号*/
structline*next;
/*指向下一个输入项目的指针*/
structline*prior;
/*指向前一个项目的指针*/
};
structline*start;
/*指向表中第一个项目的指针*/
structline*last;
/*指向表中作后一个项目的指针*/
structline*find(int),*dls_store(structline*);
voidpatchup(int,int),delete_text(),list(),save(char*),load(char*);
menu_select();
enter(intlinenum);
voidmain(intargc,char*argv[])
{
chars[80],choice,fname[80];
//structline*info;
intlinenum=1;
start=NULL;
last=NULL;
if(argc==2)load(argv[1]);
/*装入命令行上的文件*/
do{
choice=menu_select();
switch(choice){
case1:
printf("
\t行号:
"
);
gets(s);
linenum=atoi(s);
enter(linenum);
break;
case2:
delete_text();
case3:
list();
case4:
\t文件名:
gets(fname);
save(fname);
case5:
load(fname);
case6:
exit(0);
}
}while
(1);
/*显示菜单,供用户选择*/
menu_select()
chars[80];
intc;
printf("
\t\t1.输入\n"
\t\t2.删除一行\n"
\t\t3.显示一行\n"
\t\t4.文件存盘\n"
\t\t5.装入文件\n"
\t\t6.退出\n"
\n\n\t\t请按数字选择:
c=atoi(s);
}while(c<
0||c>
6);
return(c);
/*将文本插在指定行端部*/
enter(intlinenum)
structline*info;
//chart[81];
for(;
;
){
/**/
info=(structline*)malloc(sizeof(structline));
if(!
info){
\t!
内存不够!
\n"
return(NULL);
%d:
linenum);
gets(info->
text);
info->
num=linenum;
if(*info->
text){
if(find(linenum))patchup(linenum,1);
text)start=dls_store(info);
elsebreak;
linenum++;
return(linenum);
/*当文本内容插在文件中间时其下面的内容的行号必须增加1,而*/
/*删除时,被删除的文本后面的行号必须减1*/
voidpatchup(intn,intincr)
structline*i;
i=find(n);
while(i){
i->
num=i->
num+incr;
i=i->
next;
/*按行号排序后插入*/
structline*dls_store(structline*i)
structline*old,*p;
if(last==NULL){
next=NULL;
prior=NULL;
last=i;
return(i);
p=start;
old=NULL;
while(p){
if(p->
num){
old=p;
p=p->
else{
prior){
p->
prior->
next=i;
next=p;
prior=i;
returnstart;
old->
prior=old;
/*删除一行*/
voiddelete_text()
intlinenum;
\t行号:
info=find(linenum);
if(info){
if(start==info){
start=info->
if(start)start->
elselast=NULL;
next=info->
if(info!
=last)
next->
prior=info->
prior;
elselast=info->
free(info);
patchup(linenum+1,-1);
/*查找一行文本*/
structline*find(intlinenum)
info=start;
while(info){
if(linenum==info->
num)return(info);
info=info->
/*显示文本*/
voidlist()
%s\n"
info->
num,info->
\n\n"
/*存文件*/
voidsave(char*fname)
char*p;
FILE*fp;
if((fp=fopen("
text.txt"
"
w"
))==NULL){
\t文件打不开!
exit(0);
\t正在存入文件:
p=info->
text;
while(*p)putc(*p++,fp);
//putc('
\r'
fp);
putc('
\n'
fclose(fp);
/*装入文件*/
voidload(char*fname)
structline*info,*temp;
//intt,size,inct;
intsize,inct;
r"
while(start){
temp=start;
start=start->
free(temp);
\n\t正装入文件!
size=sizeof(structline);
start=(structline*)malloc(size);
start){
\n\t内存已经用完!
return;
inct=1;
while((*p=getc(fp))!
=EOF){
p++;
='
)p++;
//getc(fp);
/*丢掉'
*/
*p='
\0'
num=inct++;
next=(structline*)malloc(size);
info->
next){
prior=temp;
temp=info;
temp->
last=temp;
start->
按输入参数
a)-ofilename打开文件
b)–h帮助信息,提示各个参数的格式和含义
c)–sfilename保存文件到filename指定的路径和文件名
d)–fstringtofind查找stringtofind字符串,并将查到的字符串的个数在屏幕上显示,并将个数写到文件学号_result.txt中,路径和最后-s中的filename同一个路径
e)–rsourcestringtargetstring替换字符串,将文件中的sourcestring替换成targetstring,将替换多少处显示在屏幕上,并将替换的个数和替换后的文本都写道学号_result.txt中,路径要求同上
f)–dstringtodelete删除字符串,将文件中的stringtodelete删除,将删除多少处显示在屏幕上,并将删除的个数和删除后的文本都写到学号_result.txt中,路径要求同上
g)–q退出程序
这个大概该怎么实现,怎么能输入多次指令呢?
我之前编写的简单程序都是执行完就马上关闭的,这该怎么实现?
?
我来帮他解答
满意回答
2012-11-2802:
02
这不算文本编辑器吧。
说一下我的思路:
用一个二维数组保存参数,charcmd[N][M]={"
-o"
-h"
........};
然后根据用户输入的参数执行相应的操作,
charch[3];
while
(1)
{
scanf("
%s"
ch);
//判断参数输入是否正确,如果不正确做相应的处理
switch(ch[1])
case'
o'
:
//打开文件,调用子程序
h'
//获取帮助,调用子程序
...............
q'
//退出程序
}
追问
我要打开某个文件呢比如-oabc.txt那这个文件名在哪里读入啊要求是一次键入-ofilename怎么做呢
回答
文件名用字符数组保存,读入然后判断就可以了。
保存参数有什么用啊
不定义变量你输入的值放在哪里。
输入语句把要打开的文件名存放在数组当中
然偶再用fopen来打开这个文件该怎么做
是这样吗
charfilename[50]
......
fopen("
filename.txt"
)吗
对
0|评论
求助知友
记住一座城|当前分类:
18级排名:
506
擅长C/C++:
506|来自团队玩转C
提问者对回答的评价:
你真棒,学习了
按默认排序|按时间排序
其他回答共2条
2012-11-2923:
27naska777|当前分类:
7级
main函数式是可以带命令行参数的,不知道你在什么环境下编程,linux的例子如下:
intmain(intargc,char*argv[])
inti;
for(i=0;
i<
argc;
i++){
switch(argv[i]){
case"
文件名为argv[++i],自己想办法打开
打印帮助信息
……以此类推
编译好后的程序假设名为a.out,那么可以在命令行中输入a.out-h来打印帮助信息,也可以连续输入多个参数,比如a.out-ofile.txt-fhelp,那么将会打开文件file.txt并查找help这个字符串(具体程序会做什么要你自己在main函数中解析,我只是举个例子)
2012-11-2801:
38aiqiang930|当前分类:
4级
voidmain()
data
while
(1)
%d"
&
data);
//这里判断输入的data变量
外面写不同的处理函数
#include<
stdio.h>
iostream.h>
//在我的编译器下,不能使用printf进行输出,所以,需要你自己将流试输出改
#pragmaargsused
boolopenfile(FILE*f,char*filename);
voidsavefile(FILE*f,char*type,int*p);
intfindstr(FILE*f,char*str);
int*replace(FILE*f,char*s,char*d);
int*deletefile(FILE*f,char*s);
char*fenli(char*s);
intmain(intargc,char*argv[])
char*sel=newchar[50];
charrecord;
int*mpos;
char*fname,*fn2;
fname=&
sel[2];
FILE*in;
cout<
<
-"
gets(sel);
switch(sel[0])
cout<
帮助信息:
"
endl;
-ofilename打开文件"
–h帮助信息,提示各个参数的格式和含义"
–sfilename保存文件到filename指定的路径和文件名"
–fstringtofind查找stringtofind字符串,并将查到的字符串的个数在屏幕上显示,并将个数写到文件学号_result.txt中,路径和最后-s中的filename同一个路径"
–rsourcestringtargetstring替换字符串,将文件中的sourcestring替换成targetstring,将替换多少处显示在屏幕上,并将替换的个数和替换后的文本都写道学号_result.txt中,路径要求同上"
–dstringtodelete删除字符串,将文件中的stringtodelete删除,将删除多少处显示在屏幕上,并将删除的个数和删除后的文本都写到学号_result.txt中,路径要求同上"
q退出程序"
record='
return0;
openfile(in,fname))
打开文件错误!
exit
(1);
打开文件成功"
s'
switch(record)
r'
savefile(in,fn2,mpos);
d'
savefile(in,"
mpos);
default:
break;
f'
总共找到了"
findstr(in,fname)<
个相同的"
for(inti=0;
i<
50;
i++)
if(fname[i]=='
'
)
fn2=&
sel[i+2];
mpos=replace(in,fname,fn2);
总共替换了"
sizeof(mpos)/sizeof(*mpos);
mpos=deletefile(in,fname);
总共删除了"
return0;
//---------------------------------------------------------------------------
boolopenfile(FILE*f,char*filename)
f=fopen(filename,"
r+"
returnf;
voidsavefile(FILE*f,char*type,int*p)
f)
操作文件失败"
intt=sizeof(p)/sizeof(*p);
//计算数组有好大?
t;
fseek(f,p[i],0);
fputs(type,f);
fclose(f);
intfindstr(FILE*f,char*str)
没有文件,异常退出"
return-1;
char*temp=newchar[strlen(str)];
intcount=0;
longinti=0;
while(!
fgets(temp,strlen(str),f))
if(strcmp(temp,str)==0)
count++;
i++;
fseek(f,i,0);
FILE*re;
if((f=fopen("
_result.txt"
a+"
))==NULL)
fputs("
-f"
re);
fputc(count,re);
fputc('
fclose(re);
deletetemp;
returncount;
int*replace(FILE*f,char*s,char*d)
char*temp=newchar[strlen(s)];
longintn=0;
fgets(temp,strlen(s),f))
n++;
if(strcmp(temp,s)==0)
fseek(f,n,0);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 一个 基于 命令行 文本 编辑器
![提示](https://static.bingdoc.com/images/bang_tan.gif)