简单的文本编辑器

今天应同学的需求写了一个文本编辑器可以简单的时间文本的打开、删除、显示、查找、插入的简单功能

C语言代码如下:

 

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
#define MAX 10000
#include <string.h>
/*函数原型*/  
void menu();   
void shuru(char text[]);
void bc(char text[]);  
void dakai(char text[]);
void dayin(char text[],int k);
void chazhao(char text[],int l);
int strindex(char s[],char t[],int l);
void shanchu(char p[],int l,char pd);
void cs(char text[]);
void charu(char text[],int l);
int ntext;
/*主函数*/  
void main()
{
menu();
    
}
/*打开文件模块*/
void dakai(char text[])
{
  system("cls");   
  FILE *fp;
  int l;
  char ch,pd;
  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);
  fp=fopen(name,"r");
  if(fp==NULL)
{
  printf("打开文件失败\n");
  system("PAUSE");   
  }
  else  
{
  cs(text);
  while(!feof(fp))
  {
ch=fgetc(fp);
text[i]=ch;
  i++;   
  }
text[i]='\0';   
  
  ntext=i;   
  fclose(fp);
  printf("文件读取成功\n文件内容为\n");
  dayin(text,1);   
printf("如果需要修改请输入7:");
if (pd=='7')
charu(text,l);


  }
}
  else (pd=='M'||pd=='m');
menu();   
}
/*保存模块*/
void bc(char text[])
{




  system("cls");
  FILE *fp;
  char name[80];
  char pd,pdx;
  char tmp;
  int i;
  pd=getchar();
  printf("返回主菜单不保存输入A;任意键保存");  
  fflush(stdin);
  pdx=getchar();
  if (pdx=='A'||pdx=='a')
  {
menu();   
  }
  else {  
  printf("请输入保存文件名(例如: c:\\a.txt):");
  scanf("%s",name);
  fp=fopen(name,"w+");
  if (fp==NULL)
  {
printf("文件创建失败");
system("PAUSE");
  }
  else {
  printf("A:保持;B:取消");   
while(scanf("%c",&tmp)!=EOF)
{
if (tmp=='A' || tmp=='a')  
{
for(i=0;i<ntext;i++)
  {
fprintf(fp,"%c",text[i]);  
  }
fclose(fp);  
printf("A.直接退出程序;任意键继续运行程序");
fflush(stdin);
pd=getchar();
if (pd=='A'||pd=='a'){
  exit(0);   
  }
  break;   
  }
if (tmp=='B' || tmp=='b'){
  break;
  }   
  }
  }
}
  if (pd=='M'||pd=='m')
menu();  


}
/*初始化模块*/
void cs(char text[])
{
  int i;
  char pd;
pd=getchar();
for (i=0;i<ntext;i++){
  text[i]='\0';
  }
  ntext=0;
if (pd=='M'||pd=='m')
menu();  
  
  }  
/*菜单显示模块*/
void menu()
{


  system("cls");
  time_t timep;   
  time (&timep);
  printf("%s",ctime(&timep));  
  printf("***************简单的文本编辑器*********************\n");
  printf("***            0.清空文本内容                    ***\n");
  if (ntext==0){
  printf("***            1.输入文本内容                    ***\n");
  }  
  else {
  printf("***            1.继续输入                        ***\n");
  }
  printf("***            2.打开文本内容                    ***\n");
  printf("***            3.删除文本内容                    ***\n");
  printf("***            4.查找文本内容                    ***\n");
  printf("***            5.显示文本内容                    ***\n");
  printf("***            6.保存文本内容                    ***\n");
  printf("***            7.插入文本内容                    ***\n");
  printf("***            8.退出文本内容                    ***\n");
  printf("***            请输入你的选择(0-9)             ***\n");
  printf("****************************************************\n");
   printf(" 你的选择是:");
  char text[MAX];
char n;
ntext=0;


while (1)
{
fflush(stdin);


fflush(stdin);
n=getchar();
switch (n)
{
case '0': cs(text);break;  
  case '1': shuru(text);break;
case '2': dakai(text);break;
  case '3': shanchu(text,0,'a');break;
  case '4': chazhao(text,0);break;
case '5': dayin(text,1);break;
case '6': bc(text);break;
  case '7': charu(text,1);break;
case '8': exit(0);
case EOF: bc(text);break;
default : break;
}


}
}


/*查找*/  
void chazhao(char text[],int l)
{


  system("cls");
  int i,t1,a=-1;
  char pattern[2],bd;
  printf("请输入要查找的内容");
  scanf("%s",pattern);
  dayin(text,0);
  printf("您查找的内容是:%s\n",pattern);
  t1=strlen(pattern);
  a=strindex(text,pattern,l);
  if (a!=-1)
{
  l=a+t1;
}
  int hs=1;
  for (i=0;i<=a;i++)
{
  if (text[i]=='\n')
{
  hs++;   
  }
  }
  if (a==-1)
{
  printf("查找到结束,没有找到要查找的内容\n重新查找请按--->R;任意键退出");
  l=0;
  fflush(stdin);
  bd=getchar();  
  }
  else {
  printf("已经找到在!第%d行\n继续查找请按--->R;任意键退出",hs);
  fflush(stdin);
  bd=getchar();
  }
  if (bd=='R'||bd=='r')
{
  chazhao(text,l);   
  }  
if (bd=='M'||bd=='m')
menu();  
}
int strindex(char s[],char t[],int l)
{
  int i,j,k;
  for(i=l;s[i]!='\0';i++)
{for(j=i,k=0;t[k]!='\0'&&s[j]==t[k];j++,k++)
;
  if(k>0&&t[k]=='\0')
return j-k;
  }
  return -1;
}
/*显示模块*/
void dayin(char text[],int k)
{
char pd;
pd=getchar();
  printf("%s\n",text);  
  if (k)
{
  system("PAUSE");
  }  
  if (pd=='M'||pd=='m')
menu();  
  }  
/*输入模块*/
void shuru(char text[])
{


  system("cls");
  printf("输入@结束输入并返回主菜单\n请输入内容\n");
  printf("%s",text);
  char c;
  int i=ntext;
  fflush(stdin);   
  while ((c=getchar())!='@')
  {
/*if (c==1)
{
break;
}
else
*/{
text[i]=c;
i++;
ntext=i;
continue;
}
  }
  if (c=='$')
bc(text);


 if(c=='@')
menu();
    
}




/*删除*/  
void shanchu(char p[],int l,char pd)
{


pd=getchar();
  system("cls");
  int i,t,a=-1;
  char pattern[20],px;
  if (pd=='R'||pd=='r'){
  printf("输入A: 继续执行查找删除内容 任意键:返回主菜单");   
  }
  else {
  printf("输入A:确定要执行删除 任意键:返回主菜单");
  }
  fflush(stdin);
  px=getchar();
  if (px=='a'||px=='A'){
  printf("请输入您要删除的内容");
  scanf("%s",pattern);
  dayin(p,0);
  printf("您要删除的内容是:%s\n",pattern);
  t=strlen(pattern);
  a=strindex(p,pattern,l);
  int hs=1;
  for (i=0;i<=a;i++){
  if (p[i]=='\n'){
  hs++;   
  }
  }
  if (a==-1){
  printf("查找结束 您要删除的内容不存在\n输入R:重新输入要删除的内容");
  l=0;
  fflush(stdin);
  pd=getchar();  
  }
  else {
  printf("你要删除的内容在第%d行\n 输入A.确定删除 输入R:寻找下个词",hs);
  fflush(stdin);
  pd=getchar();
  l=a+t;
  }
  if (pd=='a'||pd=='A'){
   
  for(i=a;i<ntext;i++){
if(p[a-1]==' ')  
{
p[i]=p[i+t+1];
  }
else if((p[a+t]>=0&&p[a+t]<=64)||(p[a+t]>=91&&p[a+t]<=96)||p[a+t]>122||(p[a-1]>=0&&p[a-1]<=64)||(p[a-1]>=91&&p[a-1]<=96)||p[a-1]>122)
{  
p[i]=p[i+t];
  }
else
{
  p[i]=p[i+t];
  }
  }
  }
  else if (pd=='R'||pd=='r'){
  shanchu(p,l,pd);
  }
  if (pd=='a'||pd=='A'){
  ntext=ntext-t-1;
  printf("删除结果\n");  
dayin(p,1);
  }
  free(pattern);
  }
if (pd=='M'||pd=='m')
menu();  
}
/*插入*/
void charu(char p[],int l)
{




  int i,t,t2,a=-1;
  char pattern[20],pd,x[500];
  printf("输入您要在哪个内容前插入:");
  scanf("%s",pattern);
pd=getchar();
  t=strlen(pattern);
  a=strindex(p,pattern,l);
  int hs=1;
  for (i=0;i<=a;i++){
  if (p[i]=='\n'){
  hs++;   
  }
  printf("您要插入的位置是第%d行,%s之前,A:不是此位置B:在次位置插入",hs,pattern);
  fflush(stdin);
  pd=getchar();
  if (pd=='a'||pd=='A'){
  l=a+t;
  charu(p,l);
    
  }
  else if (pd=='b'||pd=='B')
{   
  printf("输入您要插入的内容");
  scanf("%s",x);
  t2=strlen(x);
for(i=ntext;i>=a;i--)
p[i+t+1]=p[i];
for(i=0;i<t2;i++){
p[i+a-1]=x[i];
  }
p[i+a-1]=' ';  
ntext=ntext+t2;


  printf("\n");}
}
if (pd=='M'||pd=='m')
menu();  
}

 

 

 

 

 

 

运行的结果如下:

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取

1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包

2.微信红包,微信扫一扫即可领取红包

 

微信扫一扫,每天领取微信红包

小礼物走一走,来简书关注我

posted @ 2012-06-19 16:38  程序员Android的博客  阅读(163)  评论(0编辑  收藏  举报