简易文本编辑器.docx
《简易文本编辑器.docx》由会员分享,可在线阅读,更多相关《简易文本编辑器.docx(27页珍藏版)》请在冰豆网上搜索。
简易文本编辑器
软件综合课程设计
猴子吃桃子问题
二〇一四年六月
1.问题陈述
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
?
要求:
1)采用数组数据结构实现上述求解
2)采用链数据结构实现上述求解
3)采用递归实现上述求解
如果用数组结构解决这个问题,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2。
a[i]实际代表了倒数第i天剩下的桃子数。
所以可以求得此数组的通项公式为a[i]=3*2e(i-1)-2(i>=2)。
如果用链结构解决这个问题,建立一个链表,根据每天桃子数与后一天桃子数的关系n=2*n+2,依次将每天的桃子数存进链表中,最后输出第一天的桃子数。
首先是建立一个空链表,产生一个头结点,且将头结点的地址赋给L。
然后把每天的桃子数从链表的第一个结点插入链表。
最后第一天的桃子数被最后一个插入链表,成为链表中第一个值,将其赋给e,最后只要输出e即得到第一天的桃子数。
如果用递归结构解决这个问题,要求利用他们每天都吃当前桃子的一半且再多吃一个这一特点,设计一个递归算法。
2.程序代码
#include
#include"iostream"
#include"stdlib.h"
#defineTRUE1
#defineFALSE0
#defineERROR0
#defineOVERFLOW0
#defineOK1
#defineNULL0
typedefintStatus;
typedefintElemType;
structLNode
{
ElemTypedata;
LNode*next;
};
typedefLNode*LinkList;
voidInitList(LinkList&L)//构造一个空链链表
L=(LinkList)malloc(sizeof(LNode));//产生头结点,并使L指向此头结点
if(!
L)exit(OVERFLOW);
L->next=NULL;
}
StatusGetElem(LinkListL,inti,ElemType&e)//当第i个元素存在的时,将其值赋给e
intj=1;//计数器初值为0
LinkListp=L->next;//p指向第一个结点
while(p&&j
j++;
p=p->next;
p||j>i)
returnERROR;
e=p->data;
returnOK;
StatusListInsert(LinkListL,inti,ElemTypee)//在第i个位置之前插入元素e
intj=0;//计数器初值为0
LinkLists,p=L;//p指向头结点
while(p&&j{j++;p=p->next;}if(!p||j>i-1)return0;s=(LinkList)malloc(sizeof(LNode));//生成新的结点s->data=e;s->next=p->next;//新结点指向原第i个结点p->next=s;//原第i-1个结点指向新结点return1;}voidshuju(){intda,tao[11];//定义数组和下标tao[0]=0;//tao[0]赋值为0tao[1]=1;//倒数第一天的桃子数为1for(da=2;da<=10;da++)tao[da]=3*pow(2,da-1)-2;//给数组的赋值printf("最初的桃子数为%d\n",tao[10]);//输出最初的桃子数}intsum_fan(intn,inti)//子函数sum_fun,参数n和i接受主函数的参数x和day{if(i>0){n=sum_fan((n+1)*2,--i);//每一次都用((n+1)*2)的值去调用子函数本身}returnn;//返回结果}voidmain(){intsum;intday=9;//实现函数调用的次数intx=1;//最后一天还剩得一个桃子intt;LinkListL;inti,e,n;InitList(L);//初始化链表do{printf("\n");printf("********************\n");printf("1、数组数据结构实现\n");printf("2、链数据结构实现\n");printf("3、递归实现\n");printf("4、退出\n");printf("********************\n");printf("请选择(1~4):");scanf("%d",&t);if((t>4)&&(t<1)){printf("对不起,无此功能,请输入正确的功能序号!\n");}//getchar();elseswitch(t){case2:sum=sum_fan(x,day);//调用子函数sum_fan,并把返回得结果赋给sumprintf("%d",sum);break;case1:shuju();break;case3:for(i=1,n=1;i<=10;i++){n=2*n+2;//将每一天的桃子数赋值给nListInsert(L,1,n);//将n的值输入链表}GetElem(L,2,e);printf("最初的桃子数为%d",e);//输出桃子的数目break;}if(t==4)break;}while(1);}3.运行结果(1)数组数据结构实现结果,如图3-1所示:图3-1(2)链数据结构实现结果,如图3-2所示:图3-2(3)递归实现结果,如图3-3所示:图3-3简易文本编辑器1.问题陈述(1)设计内容和要求1)具有图形菜单界面;2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除3)可正确存盘、取盘;4)正确显示总行数。2.需求分析要设计一简易的文本编辑器,要求有图形菜单界面,也就是菜单选择的界面,要实现的功能有对文本进行存盘,取盘,在某一个盘中新建一个TXT的文件,在里面输入内容,对这个文件进行取盘,显示出文本内容,并在显示的时候显示行数,具有对文本进行查找、替换、插入、移动、删除等功能。为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的两个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息:显示当前文本信息:从文件中读出文本,在某一个盘中创建一个文本文件,所以要读出来,显示到显示器上,并统计出行数。查找文本信息:因为在下面做插入,删除,移动之类的都需用到查找,在查找的时候,也要调用一个字符匹配模式的程序,来判断查找的内容是否符合所要查找的内容。删除文本信息:首先在数组中查找要删除的信息,查找的时候调用匹配模式的子函数,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;插入文本信息:首先调用字符匹配模式的子函数找到插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,选择是否在这个位置插入,如果是的话执行插入,不是的话再往下查找下一个插入点。替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;保存文本信息:在这里使用文件写入读出的功能,把你修改完的内容保存到你所建立的文本中。显示文本内容:读出文件中的所有字符,显示到显示器上。退出3.概要设计(1)所用到的函数有:文件的打开:voidopen(chartext[]);文件的保存:voidsave(chartext[]);查找文本:voidsearch(chartext[],intl);字符的匹配:intstrindex(chartext[],chart[],inti2,intl);文本的输出:voidoutput(chartext[]);删除文本:voidDelete(charp[],intl);插入文本:voidinsert(chartext[],intl);替换文本:voidReplace(intstatus);(2)程序流程图:程序分为了多个子函数,程序中的子模块的分类图,总共分为了六个主要的模块,分别是否打开,保存,查找,删除,插入,替换,这六个模块的选择,在菜单的子程序中进行,在main函数中进入菜单选择,进行功能的选择。流程如图3-1所示:图3-1在程序中,查找,删除,插入,替换的子程序都需要调用到intstrindex(chartext[],chart[],inti2,intl);的子程序,据此画出了程序的执行的流程图,程序的执行的简单的流程图,如图3-2所示:图3-24.详细设计(1)对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,在程序的执行中,先是进入的主函数,在主函数中调用了菜单函数,进行功能的选择,各个模块分为多个函数来实现。在程序中,设置了几个全局变量,来记录文本的内容等信息:chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置(2)字符匹配在这个程序中要特别注意的是字符的匹配,因为查找、插入、替换都需要用到这一步设计。在这里我设计了一个子模块来实现匹配:intstrindex(chartext[],chart[],inti2,intl)//查找要操作的数据的位置(模式匹配){inti1=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);}//返回匹配的第一个字符的下标elsereturn(-1);//模式匹配不成功}(3)按行来实现查找而且程序中用的顺序表存储的形式,在执行的时候考虑到在查找时,要显示是在第几行第几列的位置,但是程序并不是用二维数组来实现的,并不记录文本中每一个字符的行列号,所以如果直接一下子统计出来的话,就会出现行列号上的错误,所以在程序中使用了一下LOOP语句,来让程序一行一行的统计与显示。当调用strindex(text,str1,t,l)函数时,得到返回值,如果a!=-1时,得到返回的是查找的字符串的第一字符的下标,l=a+t;t是字符的长度,hs,ls,分别记录行号与列号。loop:a=strindex(text,str1,t,l);if(a!=-1){l=a+t;}inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(text[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("查找到结尾没有找到\n输入【R】将重头查找;");l=0;fflush(stdin);pd=getchar();}else{printf("已经找到在第%d行第%d列,输入【R】继续查找下一处;",hs,ls);kk+=1;fflush(stdin);bd=getchar();if(bd=='R'||bd=='r')gotoloop;}(4)插入在插入的时候是先要调用上面的查找的子函数,在插入的时候也是考虑到行列号的问题,所以我在这里也是用LOOP语句,通过一行一行的查找,找到你所要插入的地方,就进行插入操作,如果不是这个地方要插入的话,就继续往下执行查找,查找完所有的符合的,显示完后,最后统计总共有多少次。在这个子程序中定义一个数组Cr来放置插入的位置点。loop:a=strindex(text,cr,t,l);//查找并返回要插入的位置点inths=1,ls=0;for(b=0;b{ls++;if(text[b]=='\n'){hs++;ls=0;}}if(a==-1){printf("\n查找到结尾没有找到插入点,输入【R】查找其他;\n");l=0;d=getchar();else{printf("\n您要插入的位置是第%d行,第%d列之前\n",hs,ls+1);printf("\n【A】.不是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择:");pd=getchar();if(pd=='a'||pd=='A'){l=a+t;gotoloop;}for(i=ntext;i>=a;i--){text[i+t2]=text[i];}for(i=0;i{text[i+a]=x[i];}ntext=ntext+t2;printf("\n当前文本信息为:\n");for(i=0;i<=ntext-1;i++)printf("%c",text[i]);printf("\n文本插入成功\n");fflush(stdin);getchar();}}(5)替换做替换的时候,定义一个数组来放替换的内容,另一个数组放替换后的内容,而且在做替换时也要调用字符匹配的子程序。loop:a=strindex(p,bth,t,l);//查找要被替换的内容的位置inths=1,ls=0;for(b=0;b{ls++;if(p[b]=='\n'){hs++;ls=0;}}if(a==-1){printf("\n查找到结尾没有找到要被替换的内容\n输入【R】查找其他内容\n");l=0;d=getchar();else{printf("\n\n已经找到要查找的数据在第%d行第%d列\n输入",hs,ls+1);printf("\n【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:");l=t+a;charpd;pd=getchar();if(pd!='a'&&pd!='A'){printf("\n是否要替换该内容?\nA:替换给内容;其他键返回主菜单\n请选择:");d1=getchar();if(d1=='a'||d1=='A'){printf("\n输入要替换的内容,以@结束:");while((c=getchar())!='@')//t1指替换后的内容长度{if(c=='@'){break;}else{th[t1++]=c;continue;}}if(t==t1)//将要被替换的内容和替换后的内容进行长度比较{for(i=0;ip[i+a]=th[i];}else{if(t>t1){for(i=0;i{p[i+a]=th[i];}for(i=a+t1;i{p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for(i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for(i=0;i{p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for(i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegotoloop;}(6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop:a=strindex(p,x,t2,l);inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(p[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if(pd=='a'||pd=='A'){for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
p||j>i-1)return0;
s=(LinkList)malloc(sizeof(LNode));//生成新的结点
s->data=e;
s->next=p->next;//新结点指向原第i个结点
p->next=s;//原第i-1个结点指向新结点
return1;
voidshuju()
intda,tao[11];//定义数组和下标
tao[0]=0;//tao[0]赋值为0
tao[1]=1;//倒数第一天的桃子数为1
for(da=2;da<=10;da++)
tao[da]=3*pow(2,da-1)-2;//给数组的赋值
printf("最初的桃子数为%d\n",tao[10]);//输出最初的桃子数
intsum_fan(intn,inti)//子函数sum_fun,参数n和i接受主函数的参数x和day
if(i>0)
n=sum_fan((n+1)*2,--i);//每一次都用((n+1)*2)的值去调用子函数本身
returnn;//返回结果
voidmain()
intsum;
intday=9;//实现函数调用的次数
intx=1;//最后一天还剩得一个桃子
intt;
LinkListL;
inti,e,n;
InitList(L);//初始化链表
do{
printf("\n");
printf("********************\n");
printf("1、数组数据结构实现\n");
printf("2、链数据结构实现\n");
printf("3、递归实现\n");
printf("4、退出\n");
printf("请选择(1~4):
");
scanf("%d",&t);
if((t>4)&&(t<1))
printf("对不起,无此功能,请输入正确的功能序号!
\n");
//getchar();
else
switch(t)
case2:
sum=sum_fan(x,day);//调用子函数sum_fan,并把返回得结果赋给sum
printf("%d",sum);
break;
case1:
shuju();break;
case3:
for(i=1,n=1;i<=10;i++)
n=2*n+2;//将每一天的桃子数赋值给n
ListInsert(L,1,n);//将n的值输入链表
GetElem(L,2,e);
printf("最初的桃子数为%d",e);//输出桃子的数目break;
if(t==4)break;
while
(1);}
3.运行结果
(1)数组数据结构实现结果,如图3-1所示:
图3-1
(2)链数据结构实现结果,如图3-2所示:
图3-2
(3)递归实现结果,如图3-3所示:
图3-3
(1)设计内容和要求
1)具有图形菜单界面;
2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除
3)可正确存盘、取盘;
4)正确显示总行数。
2.需求分析
要设计一简易的文本编辑器,要求有图形菜单界面,也就是菜单选择的界面,要实现的功能有对文本进行存盘,取盘,在某一个盘中新建一个TXT的文件,在里面输入内容,对这个文件进行取盘,显示出文本内容,并在显示的时候显示行数,具有对文本进行查找、替换、插入、移动、删除等功能。
为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。
顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。
其特点为:
在顺序表上逻辑关系相邻的两个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。
在编辑器的主界面中应有如下提示信息:
显示当前文本信息:
从文件中读出文本,在某一个盘中创建一个文本文件,所以要读出来,显示到显示器上,并统计出行数。
查找文本信息:
因为在下面做插入,删除,移动之类的都需用到查找,在查找的时候,也要调用一个字符匹配模式的程序,来判断查找的内容是否符合所要查找的内容。
删除文本信息:
首先在数组中查找要删除的信息,查找的时候调用匹配模式的子函数,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;
插入文本信息:
首先调用字符匹配模式的子函数找到插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,选择是否在这个位置插入,如果是的话执行插入,不是的话再往下查找下一个插入点。
替换文本信息:
首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;
保存文本信息:
在这里使用文件写入读出的功能,把你修改完的内容保存到你所建立的文本中。
显示文本内容:
读出文件中的所有字符,显示到显示器上。
退出
3.概要设计
(1)所用到的函数有:
文件的打开:
voidopen(chartext[]);
文件的保存:
voidsave(chartext[]);
查找文本:
voidsearch(chartext[],intl);
字符的匹配:
intstrindex(chartext[],chart[],inti2,intl);
文本的输出:
voidoutput(chartext[]);
删除文本:
voidDelete(charp[],intl);
插入文本:
voidinsert(chartext[],intl);
替换文本:
voidReplace(intstatus);
(2)程序流程图:
程序分为了多个子函数,程序中的子模块的分类图,总共分为了六个主要的模块,分别是否打开,保存,查找,删除,插入,替换,这六个模块的选择,在菜单的子程序中进行,在main函数中进入菜单选择,进行功能的选择。
流程如图3-1所示:
在程序中,查找,删除,插入,替换的子程序都需要调用到intstrindex(chartext[],chart[],inti2,intl);的子程序,据此画出了程序的执行的流程图,程序的执行的简单的流程图,如图3-2所示:
4.详细设计
(1)对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,在程序的执行中,先是进入的主函数,在主函数中调用了菜单函数,进行功能的选择,各个模块分为多个函数来实现。
在程序中,设置了几个全局变量,来记录文本的内容等信息:
chartext[MAX]="";//文本编辑域
charname[20]="";//文件保存的位置
intstatus=0;//显示是否保存过的状态
intntext;//文本编辑的位置
(2)字符匹配
在这个程序中要特别注意的是字符的匹配,因为查找、插入、替换都需要用到这一步设计。
在这里我设计了一个子模块来实现匹配:
intstrindex(chartext[],chart[],inti2,intl)//查找要操作的数据的位置(模式匹配)
inti1=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);}//返回匹配的第一个字符的下标elsereturn(-1);//模式匹配不成功}(3)按行来实现查找而且程序中用的顺序表存储的形式,在执行的时候考虑到在查找时,要显示是在第几行第几列的位置,但是程序并不是用二维数组来实现的,并不记录文本中每一个字符的行列号,所以如果直接一下子统计出来的话,就会出现行列号上的错误,所以在程序中使用了一下LOOP语句,来让程序一行一行的统计与显示。当调用strindex(text,str1,t,l)函数时,得到返回值,如果a!=-1时,得到返回的是查找的字符串的第一字符的下标,l=a+t;t是字符的长度,hs,ls,分别记录行号与列号。loop:a=strindex(text,str1,t,l);if(a!=-1){l=a+t;}inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(text[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("查找到结尾没有找到\n输入【R】将重头查找;");l=0;fflush(stdin);pd=getchar();}else{printf("已经找到在第%d行第%d列,输入【R】继续查找下一处;",hs,ls);kk+=1;fflush(stdin);bd=getchar();if(bd=='R'||bd=='r')gotoloop;}(4)插入在插入的时候是先要调用上面的查找的子函数,在插入的时候也是考虑到行列号的问题,所以我在这里也是用LOOP语句,通过一行一行的查找,找到你所要插入的地方,就进行插入操作,如果不是这个地方要插入的话,就继续往下执行查找,查找完所有的符合的,显示完后,最后统计总共有多少次。在这个子程序中定义一个数组Cr来放置插入的位置点。loop:a=strindex(text,cr,t,l);//查找并返回要插入的位置点inths=1,ls=0;for(b=0;b{ls++;if(text[b]=='\n'){hs++;ls=0;}}if(a==-1){printf("\n查找到结尾没有找到插入点,输入【R】查找其他;\n");l=0;d=getchar();else{printf("\n您要插入的位置是第%d行,第%d列之前\n",hs,ls+1);printf("\n【A】.不是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择:");pd=getchar();if(pd=='a'||pd=='A'){l=a+t;gotoloop;}for(i=ntext;i>=a;i--){text[i+t2]=text[i];}for(i=0;i{text[i+a]=x[i];}ntext=ntext+t2;printf("\n当前文本信息为:\n");for(i=0;i<=ntext-1;i++)printf("%c",text[i]);printf("\n文本插入成功\n");fflush(stdin);getchar();}}(5)替换做替换的时候,定义一个数组来放替换的内容,另一个数组放替换后的内容,而且在做替换时也要调用字符匹配的子程序。loop:a=strindex(p,bth,t,l);//查找要被替换的内容的位置inths=1,ls=0;for(b=0;b{ls++;if(p[b]=='\n'){hs++;ls=0;}}if(a==-1){printf("\n查找到结尾没有找到要被替换的内容\n输入【R】查找其他内容\n");l=0;d=getchar();else{printf("\n\n已经找到要查找的数据在第%d行第%d列\n输入",hs,ls+1);printf("\n【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:");l=t+a;charpd;pd=getchar();if(pd!='a'&&pd!='A'){printf("\n是否要替换该内容?\nA:替换给内容;其他键返回主菜单\n请选择:");d1=getchar();if(d1=='a'||d1=='A'){printf("\n输入要替换的内容,以@结束:");while((c=getchar())!='@')//t1指替换后的内容长度{if(c=='@'){break;}else{th[t1++]=c;continue;}}if(t==t1)//将要被替换的内容和替换后的内容进行长度比较{for(i=0;ip[i+a]=th[i];}else{if(t>t1){for(i=0;i{p[i+a]=th[i];}for(i=a+t1;i{p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for(i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for(i=0;i{p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for(i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegotoloop;}(6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop:a=strindex(p,x,t2,l);inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(p[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if(pd=='a'||pd=='A'){for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
{if(text[i1]==t[j])//继续匹配下一个字符
{j++;
i1++;}//主串和子串依次匹配下一个字符
else//主串、子串指针回溯重新开始下一次匹配
{i1=i1-j+1;//主串从下一个位置开始匹配
j=0;}//子串从头开始匹配
if(j>=i2)
{return(i1-i2);}//返回匹配的第一个字符的下标
return(-1);//模式匹配不成功
(3)按行来实现查找
而且程序中用的顺序表存储的形式,在执行的时候考虑到在查找时,要显示是在第几行第几列的位置,但是程序并不是用二维数组来实现的,并不记录文本中每一个字符的行列号,所以如果直接一下子统计出来的话,就会出现行列号上的错误,所以在程序中使用了一下LOOP语句,来让程序一行一行的统计与显示。
当调用strindex(text,str1,t,l)函数时,得到返回值,如果a!
=-1时,得到返回的是查找的字符串的第一字符的下标,l=a+t;t是字符的长度,hs,ls,分别记录行号与列号。
loop:
a=strindex(text,str1,t,l);
if(a!
=-1)
{l=a+t;}
inths=1,ls=0;
for(i=0;i<=a;i++)
{ls++;
if(text[i]=='\n')
{hs++;ls=0;}
}if(a==-1)
{printf("查找到结尾没有找到\n输入【R】将重头查找;");
l=0;
fflush(stdin);
pd=getchar();}
else{printf("已经找到在第%d行第%d列,输入【R】继续查找下一处;",hs,ls);
kk+=1;
bd=getchar();
if(bd=='R'||bd=='r')
gotoloop;}
(4)插入
在插入的时候是先要调用上面的查找的子函数,在插入的时候也是考虑到行列号的问题,所以我在这里也是用LOOP语句,通过一行一行的查找,找到你所要插入的地方,就进行插入操作,如果不是这个地方要插入的话,就继续往下执行查找,查找完所有的符合的,显示完后,最后统计总共有多少次。
在这个子程序中定义一个数组Cr来放置插入的位置点。
a=strindex(text,cr,t,l);//查找并返回要插入的位置点
for(b=0;b{ls++;if(text[b]=='\n'){hs++;ls=0;}}if(a==-1){printf("\n查找到结尾没有找到插入点,输入【R】查找其他;\n");l=0;d=getchar();else{printf("\n您要插入的位置是第%d行,第%d列之前\n",hs,ls+1);printf("\n【A】.不是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择:");pd=getchar();if(pd=='a'||pd=='A'){l=a+t;gotoloop;}for(i=ntext;i>=a;i--){text[i+t2]=text[i];}for(i=0;i{text[i+a]=x[i];}ntext=ntext+t2;printf("\n当前文本信息为:\n");for(i=0;i<=ntext-1;i++)printf("%c",text[i]);printf("\n文本插入成功\n");fflush(stdin);getchar();}}(5)替换做替换的时候,定义一个数组来放替换的内容,另一个数组放替换后的内容,而且在做替换时也要调用字符匹配的子程序。loop:a=strindex(p,bth,t,l);//查找要被替换的内容的位置inths=1,ls=0;for(b=0;b{ls++;if(p[b]=='\n'){hs++;ls=0;}}if(a==-1){printf("\n查找到结尾没有找到要被替换的内容\n输入【R】查找其他内容\n");l=0;d=getchar();else{printf("\n\n已经找到要查找的数据在第%d行第%d列\n输入",hs,ls+1);printf("\n【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:");l=t+a;charpd;pd=getchar();if(pd!='a'&&pd!='A'){printf("\n是否要替换该内容?\nA:替换给内容;其他键返回主菜单\n请选择:");d1=getchar();if(d1=='a'||d1=='A'){printf("\n输入要替换的内容,以@结束:");while((c=getchar())!='@')//t1指替换后的内容长度{if(c=='@'){break;}else{th[t1++]=c;continue;}}if(t==t1)//将要被替换的内容和替换后的内容进行长度比较{for(i=0;ip[i+a]=th[i];}else{if(t>t1){for(i=0;i{p[i+a]=th[i];}for(i=a+t1;i{p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for(i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for(i=0;i{p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for(i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegotoloop;}(6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop:a=strindex(p,x,t2,l);inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(p[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if(pd=='a'||pd=='A'){for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
if(text[b]=='\n')
{hs++;
ls=0;}
if(a==-1)
{printf("\n查找到结尾没有找到插入点,输入【R】查找其他;\n");
d=getchar();
{printf("\n您要插入的位置是第%d行,第%d列之前\n",hs,ls+1);
printf("\n【A】.不是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择:
pd=getchar();
if(pd=='a'||pd=='A')
{l=a+t;
gotoloop;
for(i=ntext;i>=a;i--)
{text[i+t2]=text[i];}
for(i=0;i{text[i+a]=x[i];}ntext=ntext+t2;printf("\n当前文本信息为:\n");for(i=0;i<=ntext-1;i++)printf("%c",text[i]);printf("\n文本插入成功\n");fflush(stdin);getchar();}}(5)替换做替换的时候,定义一个数组来放替换的内容,另一个数组放替换后的内容,而且在做替换时也要调用字符匹配的子程序。loop:a=strindex(p,bth,t,l);//查找要被替换的内容的位置inths=1,ls=0;for(b=0;b{ls++;if(p[b]=='\n'){hs++;ls=0;}}if(a==-1){printf("\n查找到结尾没有找到要被替换的内容\n输入【R】查找其他内容\n");l=0;d=getchar();else{printf("\n\n已经找到要查找的数据在第%d行第%d列\n输入",hs,ls+1);printf("\n【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:");l=t+a;charpd;pd=getchar();if(pd!='a'&&pd!='A'){printf("\n是否要替换该内容?\nA:替换给内容;其他键返回主菜单\n请选择:");d1=getchar();if(d1=='a'||d1=='A'){printf("\n输入要替换的内容,以@结束:");while((c=getchar())!='@')//t1指替换后的内容长度{if(c=='@'){break;}else{th[t1++]=c;continue;}}if(t==t1)//将要被替换的内容和替换后的内容进行长度比较{for(i=0;ip[i+a]=th[i];}else{if(t>t1){for(i=0;i{p[i+a]=th[i];}for(i=a+t1;i{p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for(i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for(i=0;i{p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for(i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegotoloop;}(6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop:a=strindex(p,x,t2,l);inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(p[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if(pd=='a'||pd=='A'){for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
{text[i+a]=x[i];}
ntext=ntext+t2;
printf("\n当前文本信息为:
for(i=0;i<=ntext-1;i++)
printf("%c",text[i]);
printf("\n文本插入成功\n");
getchar();}
(5)替换
做替换的时候,定义一个数组来放替换的内容,另一个数组放替换后的内容,而且在做替换时也要调用字符匹配的子程序。
a=strindex(p,bth,t,l);//查找要被替换的内容的位置
for(b=0;b{ls++;if(p[b]=='\n'){hs++;ls=0;}}if(a==-1){printf("\n查找到结尾没有找到要被替换的内容\n输入【R】查找其他内容\n");l=0;d=getchar();else{printf("\n\n已经找到要查找的数据在第%d行第%d列\n输入",hs,ls+1);printf("\n【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:");l=t+a;charpd;pd=getchar();if(pd!='a'&&pd!='A'){printf("\n是否要替换该内容?\nA:替换给内容;其他键返回主菜单\n请选择:");d1=getchar();if(d1=='a'||d1=='A'){printf("\n输入要替换的内容,以@结束:");while((c=getchar())!='@')//t1指替换后的内容长度{if(c=='@'){break;}else{th[t1++]=c;continue;}}if(t==t1)//将要被替换的内容和替换后的内容进行长度比较{for(i=0;ip[i+a]=th[i];}else{if(t>t1){for(i=0;i{p[i+a]=th[i];}for(i=a+t1;i{p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for(i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for(i=0;i{p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for(i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegotoloop;}(6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop:a=strindex(p,x,t2,l);inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(p[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if(pd=='a'||pd=='A'){for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
if(p[b]=='\n')
ls=0;}}
{printf("\n查找到结尾没有找到要被替换的内容\n输入【R】查找其他内容\n");
{printf("\n\n已经找到要查找的数据在第%d行第%d列\n输入",hs,ls+1);
printf("\n【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:
l=t+a;
charpd;
if(pd!
='a'&&pd!
='A')
{printf("\n是否要替换该内容?
\nA:
替换给内容;其他键返回主菜单\n请选择:
d1=getchar();
if(d1=='a'||d1=='A')
{printf("\n输入要替换的内容,以@结束:
while((c=getchar())!
='@')//t1指替换后的内容长度
{if(c=='@')
{break;}
{th[t1++]=c;
continue;}
if(t==t1)//将要被替换的内容和替换后的内容进行长度比较
{for(i=0;ip[i+a]=th[i];}else{if(t>t1){for(i=0;i{p[i+a]=th[i];}for(i=a+t1;i{p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for(i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for(i=0;i{p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for(i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegotoloop;}(6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop:a=strindex(p,x,t2,l);inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(p[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if(pd=='a'||pd=='A'){for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
p[i+a]=th[i];}
{if(t>t1)
{for(i=0;i{p[i+a]=th[i];}for(i=a+t1;i{p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for(i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for(i=0;i{p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for(i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegotoloop;}(6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop:a=strindex(p,x,t2,l);inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(p[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if(pd=='a'||pd=='A'){for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
{p[i+a]=th[i];}
for(i=a+t1;i{p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for(i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for(i=0;i{p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for(i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegotoloop;}(6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop:a=strindex(p,x,t2,l);inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(p[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if(pd=='a'||pd=='A'){for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
{p[i]=p[i+t-t1];}
ntext=ntext+t1-t;}
{for(i=ntext;i>=a;i--)
{p[i+t1-t]=p[i];}
for(i=0;i{p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for(i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegotoloop;}(6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop:a=strindex(p,x,t2,l);inths=1,ls=0;for(i=0;i<=a;i++){ls++;if(p[i]=='\n'){hs++;ls=0;}}if(a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if(pd=='a'||pd=='A'){for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
printf("替换成功");
for(i2=0;i2<=ntext-1;i2++)
printf("%c",p[i2]);
getchar();
status=0;}}
(6)删除
删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,
a=strindex(p,x,t2,l);
if(p[i]=='\n')
{printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;");
pdx=getchar();}
{printf("你要删除的内容在第%d行第%d列\n输入【A】确定删除;输入【B】寻找下个词;",hs,ls);
l=t2+a;
{for(i=a;i{p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}elseif(pd=='b'||pd=='B')gotoloop;}5.程序代码#include"stdio.h"#include"stdlib.h"#include"string.h"voidopen(chartext[]);voidsave(chartext[]);voidsearch(chartext[],intl);intstrindex(chartext[],chart[],inti2,intl);voidoutput(chartext[]);voidDelete(charp[],intl);voidinsert(chartext[],intl);voidReplace(intstatus);voidmenu();#defineMAX10000chartext[MAX]="";//文本编辑域charname[20]="";//文件保存的位置intstatus=0;//显示是否保存过的状态intntext;//文本编辑的位置voidopen(chartext[]){system("cls");FILE*fp;charpd,ch;charname[30];inti=0,ss=1;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);}system("cls");while(!feof(fp)){ch=fgetc(fp);if(ch=='\n')ss++;text[i++]=ch;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");output(text);printf("有%d行",ss);}if(pd=='M'||pd=='m')menu();}voidsave(chartext[]){system("cls");FILE*fp;charpd;chartmp;inti;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;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
{p[i]=p[i+t2];}
ntext=ntext-t2;
printf("删除成功,删除后的内容为:
\n%s\n",text);}
elseif(pd=='b'||pd=='B')
5.程序代码
#include"stdio.h"
#include"string.h"
voidmenu();
#defineMAX10000
voidopen(chartext[])
{system("cls");
FILE*fp;
charpd,ch;
charname[30];
inti=0,ss=1;
printf("输入A:
确定打开文件M:
返回主菜单");
if(pd=='A'||pd=='a')
{printf("请输入要打开文件名字(例如c:
\\a.txt)");
scanf("%s",name);
while((fp=fopen(name,"r"))==NULL)
{printf("\n打开文件失败,请重新输入要打开的文件名:
scanf("%s",name);}
system("cls");
while(!
feof(fp))
{ch=fgetc(fp);if(ch=='\n')ss++;
text[i++]=ch;}
text[i]='\0';
ntext=i;
fclose(fp);
printf("\n文件读取成功\n文件内容为\n");
output(text);
printf("有%d行",ss);
if(pd=='M'||pd=='m')
menu();
voidsave(chartext[])
chartmp;
inti;
printf("\n输入【A】保存;\n");
(pd=='A'||pd=='a'))
{menu();}
{if(name[20]==NULL)
{printf("\n请输入保存文件名(例如:
c:
\\a.txt):
while((fp=fopen(name,"w+"))==NULL)
{printf("文件不存在,请重新输入文件名:
printf("\nA:
确定;B:
取消:
while(scanf("%c",&tmp)!
=EOF)
{if(tmp=='A'||tmp=='a')
{for(i=0;ifprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if(tmp=='B'||tmp=='b'){break;}}}}/////////////////////////
fprintf(fp,"%c",text[i]);
status=1;
printf("\n文件保存成功\n");
if(tmp=='B'||tmp=='b')
/////////////////////////
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1