C语言实现简易文本编译器

数据结构课程设计之简易文本编译器(C语言实现)

需求分析

(1)具有图形菜单界面:显示实时年份,日期,星期及时间

(2)

查找:查找文本中的字符串,显示其出现的行数,列数及总共出现次数

替换(等长,不等长):对文本中的文本实现等长及不等长替换

插入(插串,文本块的插入):插入一行或在具体行号列号处插入文本

块移动(行块,列块移动):向下移动一行,向上移动一行,

具体行号列号处向左移动或向右移动

删除:删除一行,删除莫一行,莫列,定长的内容

(3)可正确存盘、取盘;:可读取,保存文本;

(4)正确显示总行数。(行数不少于5行,每行字符数不少于80个字符)

采用的数据结构

1:采用的逻辑结构

文本编辑器主要是针对文本进行编辑,文本的操作就是对字符的操作。文本编辑器可以从行、

列两个方向进行编辑。

每一行可以看成一个线性表,线性表是一种线性结构,线性结构的特点是数据元素之间为线性

关系,据元素“一个接一个的排列”。在一个线性表中数据元素的类型是相同的,由于每一行

可以存储的最大字数是相同的,行方向所有线性表的最大长度可以设置成相同的。行与行之间

的关系也可以看成一个线性表。

2.采用的存储结构

线性表的存储分为两种:顺序存储和链式存储。

顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式

存储的线性表称为顺序表。在程序设计语言中,一维数组在内存中占用的存储空间就是一组连续

的存储区域,因此,用一维数组来表示顺序表的数据存储区域是再合适不过的。

链式存储是通过-组任意的存储单元来存储线性表中的数据元素的,为建立数据元系之间的线性

关系对每个数据元素除了存放数据元素自身的信息之外,还需要和一起存放其后继或前驱所在的

存储单元的地址,这两部分信息组成一个“结点”,每个元素都如此。存放数据元素信息的称为

数据域,存放其前驱或后继地址的称为指针域。只有一个存储单元地址的为单链表,有两个存储

单元地址的为双链表。

考虑到实际的功能需求,每行的线性表可以用顺序存储方式,每个字符是一个节点。用数组的长

度表示本行可以输入的最大字符。行与行之间的线性表采用双链表存储,每个节点包括四个区域,

一个指针域prior指向上一行,一个指针域next指向下一行,一个数据域num是行号,一个数据

域是本行的字符数组。程序以行和列标识文本位置,行采用双向链表存储行信息,用数组下标标识

列信息,从而能够准确定位字符位置,然后进行查找、替换、插入、块移动、删除等多种操作。

函数功能模块图:

定义的结构体:

struct line

{

    char  text[MAX_LEN];      //本行的文本
    int num;                 //行号
    struct line *next;       //指向下一行的指针
    struct line *prior;      //指向前一行的指针 

 };

代码如下(仅供参考)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#define MAX 240
#define NOT_FOUND -1
//函数声明
void HeadWord(void);      //输出大标题,永远出现在程序的最顶端。
void PrintWord(void);    //输出文本的内容
void printf_time();      //输出时间和日期,星期及年月日
void scanf_load();       //从键盘录入文本
void file_load();        //把文本文件的内容读到线性表中
void findstr();          //查找字符串
void delete1(int linenum);//删除一行
void delete2(int linenum,int position,int lenth);//删除莫一行,莫列,定长的内容
void insert1();           // 插入一行文字
void insert2(char str[], int linenum, int position);//插入文字到文本莫一行莫一列
void replace();          //替换
void Mainmenu();          //主菜单
void menu1();                //文件录入方式菜单
void menu2();               //文本内容处理菜单
void menu_move();          //移动菜单 

//定义结构体
struct line
{
 char text[MAX];      //该行的内容
 int num;                 //用来记录行号
 struct line *prior;      //用来指向前一行
 struct line *next;       //用来指向下一行
 };
struct line *start;          //指向线性表的第一行
struct line *last;           //指向线性表的最后一行

//主函数
int main()
{ 

 Mainmenu();
 return 0;
}

//输出标题,永远出现在程序的最顶端。
void HeadWord()
{

printf("\t\t ____________________________________________________\n\n");
printf("\t\t****    Welcom to use our TXT edition system!    ****\n");
printf("\t\t ____________________________________________________\n");
}

//  输出链表的内容
void PrintWord()
{

 struct line *p = start;
 while(p != last)
 {
  printf("\n\t\t第%d行|%s",p->num,p->text);
  p = p->next;
 }
 printf("\n\t\t第%d行|%s",last->num,last->text);
  printf("\n");
}

//输出时间和日期
void printf_time()
{

 time_t timep;
 struct tm *p;
 time (&timep);
 p=gmtime(&timep);
 //年月日
 printf("\t\t|Data:%d-%d-%d  |",1900+p->tm_year,1+p->tm_mon,p->tm_mday);

 //显示星期几
  printf("Today is ");
 switch (p->tm_wday)
    {
    case 7:
        printf("Sunday   |");
        break;
    case 1:
        printf("Monday   |");
        break;
    case 2:
        printf("Tuesday  |");
        break;
    case 3:
        printf("Wednesday|");
        break;
    case 4:
        printf("Thursday |");
        break;
    case 5:
        printf(" Friday  |");
        break;
    case 6:
        printf("Saturday |");
        break;
    default:
        break; }
 //让时间固定显示为 08:04:11类型,即当时,分,秒小于十时前加零
 if(p->tm_hour+8<10&&p->tm_min>10&&p->tm_sec>10)
 printf("Time:0%d:%d:%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
 else if(p->tm_hour+8<10&&p->tm_min<10&&p->tm_sec>10)
 printf("Time:0%d:0%d:%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
 else if(p->tm_hour+8<10&&p->tm_min<10&&p->tm_sec<10)
 printf("Time:0%d:0%d:0%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
 else if(p->tm_hour+8>=10&&p->tm_min<10&&p->tm_sec<10)
 printf("Time:%d:0%d:0%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
 else if(p->tm_hour+8>=10&&p->tm_min>=10&&p->tm_sec<10)
 printf("Time:%d:%d:0%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
 else if(p->tm_hour+8>=10&&p->tm_min>=10&&p->tm_sec>=10)
 printf("Time:%d:%d:%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
 else if(p->tm_hour+8>=10&&p->tm_min<10&&p->tm_sec>=10)
 printf("Time:%d:0%d:%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
 else if(p->tm_hour+8<10&&p->tm_min>=10&&p->tm_sec<10)
 printf("Time:0%d:%d:0%d |",p->tm_hour+8,p->tm_min,p->tm_sec);

} 

//把文本文件的内容读到线性表中
void file_load()
{
 struct line *info,*temp;                 //行指针,info指向当前行,temp指向info的前驱行
 char ch;
 temp = NULL;
 int linenum,i;          //行计数器,行字符数组下标
 FILE *fp;                             //文件指针
 char name[20];
 printf("请输入要打开文件名字(例如c:\\a.txt)");
 scanf("%s",name);
 while ((fp=fopen(name,"r"))==NULL)
 {
   printf("\n打开文件失败,请重新输入要打开的文件名:");
   scanf("%s",name);
    }
 start = (struct line*)malloc(sizeof(struct line));     //生成一行的结点空间
 info = start;
 linenum = 1;

 while((ch = fgetc(fp)) != EOF)
 {
   i = 0;
   info->text[i] = ch;
   i++;
   while((ch = fgetc(fp)) != '\n')      //从文件中读到一行字符到线性表中
   {
    info->text[i] = ch;
    i++;
   }
 info->num = linenum++;
 info->next = (struct line*)malloc(sizeof(struct line));
 if (!info->next)
 {
  printf("\n\t\t内存不足");
  getchar();
  exit(0);
 }

 temp = info;
 info = info->next;
 info->prior = temp;
  }
  last = info->prior;
  printf("\t\t文件读入完毕\n");
  fclose(fp);

}

//从键盘录入文本
void scanf_load()
{
 struct line *info,*temp;                 //行指针,info指向当前行,temp指向info的前驱行
 char ch;
 temp = NULL;
 int linenum,i;          //行计数器,行字符数组下标
 FILE *fp;                                 //文件指针
 temp = NULL;
 start = (struct line*)malloc(sizeof(struct line));     //生成一行的结点空间
 info = start;
 linenum = 1;
 printf("\t\t请从键盘录入文本(输入时回车换行,输入结束后在新的一行输入#结束录入)\n\t\t");
 while((ch = getchar()) !='#')
 {
   i = 0;
   info->text[i] = ch;
   i++;
   while((ch = getchar()) != '\n')      //从文件中读到一行字符到线性表中
   {

    info->text[i] = ch;
    i++;

   }
 printf("\t\t");
 info->text[i] = '\0';
 info->num = linenum++;
 info->next = (struct line*)malloc(sizeof(struct line));
 if (!info->next)
 {
  printf("\n\t\t内存不足");
  getchar();
  exit(0);
 }
 info->prior = temp;
 temp = info;
 info = info->next;
  }
  temp->next = NULL;
  last = temp;
  free(info);
  start->prior = NULL;

}

//文件保存
void save()
{
    system("cls");
 FILE *fp;
    line *info=start;
 int i=0;
    char name[20];
 printf("\n请输入保存地址(例如: c:\\a.txt):");
 scanf("%s",name);
  while ((fp=fopen(name,"w+"))==NULL)
  {
   printf("文件不存在,请重新输入文件名:");
   scanf("%s",name);
  }
 while(info)
 {
        while(info->text[i]!='\n')
  {fprintf(fp,"%c",info->text[i]);
   i++;
  }
  info = info->next;
  i = 0;
 }

        fclose(fp);
  printf("\n文件保存成功\n"); 

} 

 //查找字符串
void findstr(){

 PrintWord();
 char str[MAX];
 getchar();
 printf("\t\t 输入想要查找的字符串:");
 gets(str);
 printf("\t\t|>>________________________________________________<<|\n");
   struct line *info;
 int i = 0, find_len, found = 0, position;
 char substring[MAX];
 info = start;
 int find_num = 0;             //匹配到的次数
 find_len = strlen(str);
 while (info)   //查询
 { 

  i = 0;  //行间循环
  while (i <= (strlen(info->text) - find_len))  //行内查找循环
  { int k=0;

   for(int j=i;j<i+find_len;j++)   // 行内的字符串从第一个开始按定长find_len赋给substring
   {
    substring[k] = info->text[j];
    k++;
   }
   if (strcmp(substring,str) == 0)
   {
    find_num++;

    printf("\t\t|第%d次出现在:%d行%d列\n",find_num,info->num,(i+1+1)/2);
    found = 1;
   }
    i++;
  }
  info = info->next;
 }
 if (found)  //查找成功
  printf("\t\t|\t\t该内容出现的总次数为%d\n",find_num);
 else   //查找不成功
  printf("\t\t该内容不存在\n");
 printf("\t\t|>>________________________________________________<<|\n");

}

//删除一行
void delete1(int line_num)
{
 struct line * info, *p;
 info = start;
 while ((info->num < line_num) && info)  //寻找要删除的行
  info = info->next;
 if (info == NULL)
  printf("该行不存在");
 else
 {
  p = info->next;     //指向要删除的行后面一行
  if (start == info) //如果删除的是第一行
  {
   start = info->next;
   if (start)  //如果删除后,不为空
    start->prior = NULL;
   else  //删除后为空
    last = NULL;
  }
  else
  {
   info->prior->next = info->next;  //指定行的上一行指向指定行的下一行
   if (info != last) //如果不是最后一行
    info->next->prior = info->prior;  //修改其下一行的指向头的指针
   else  //如果是最后一行,修改尾指针
    last = info->prior;
  }
  free(info);
  while (p) //被删除行之后的行号减一
  {
   p->num = p->num - 1;
   p = p->next;
  }

 }

}

//删除莫一行,莫列,定长的内容
void delete2(int line_num,int position,int lenth)
{ 

 struct line *info=start;
 char rest_str[MAX];
 if(line_num == 1)
 info = start;
 else
 for(int i=1;i<line_num;i++)       //让info指向删除内容所在行
 info = info->next;
 if (info == NULL)
  printf("该行没有字符!n");
 else
 {
  if (strlen(info->text) <= (position + lenth))  //本行的字符长度<=待删除的列号+删除长度,直接在当前位置插入'\0'
   info->text[position] = '\0';
  else
  { int i;
   for(i = position-1;info->text[i+lenth]!='\0';i++)
   info->text[i]=info->text[i+lenth];
   info->text[i]='\0';
  }
 }
}

// 插入一行文字
void insert1()
{
 int linenum;
 printf("\t\t输入插入位置的行号:");
 scanf("%d", &linenum);
 struct line * info, * q, * p;
 p = start;
 q = NULL;

 while (p && p->num != linenum)
 {
  q = p;    //插入行前面一行
  p = p->next;    //插入行后面一行
 }

 if (p == NULL && (q->num + 1) != linenum) //指定行不存在,不能插入
 {
  printf("\t\t输入的行号不存在");
 }

 else // 指定行存在,进行插入
 {
  info = (struct line *)malloc(sizeof(struct line));
  printf("\t\t输入要插入的字符串:");
  scanf("%s", info->text);
  info->num = linenum;
  if (linenum == 1)       //插入在第一行
  {
   info->next = p;
   p->prior = info;
   info->prior = NULL;
   start = info;
  }

  else if (q->num != linenum)  //插入在最后一行
  {
   q->next = info;
   info->next = p;
   info->prior = q;
  }

  else     //插入在其他行
  {
   q->next = info;
   info->next = p;
   p->prior = info;
   info->prior = q;
  }

  while (p)   //如果不是插入在最后一行,插入行后面的行号都加1
  {
   p->num = p->num + 1;
   p = p->next;
  }

 }

}

//插入文字到文本莫一行莫一列
void insert2(char str[], int linenum, int position)
{

 struct line * info;
 int len, i;
 int lenth;
 char rest_str[MAX],kongge[2] = { " " };
 info = start;
 while (info && info->num != linenum)   //查询要插入的行
 {
  info = info->next;
 }
 if (info == NULL)
  printf("不存在该行!\n");
 else if (position < 0)
  printf("不存在该列!\n");
 else    //如果行和列都存在,则进行插入
 {
  lenth = strlen(info->text);
  if (lenth < position) //插入列大于本行文件列数
  {
   len = position - lenth - 1;
   for (i = 0; i < len; i++)
   strcat(info->text, kongge);   //将空余的部分插入空格符
   strcat(info->text, str);    //插入字符到列的未尾
  }

  else   //插入列在本行文字的中间
  {
   strcpy(rest_str, &info->text[position - 1]);
   strcpy(&info->text[position - 1], str);
   strcat(info->text, rest_str);
  }
 }
} 

//替换
void replace()
{
 PrintWord();
 char str[MAX];
 printf("\t\t输入想要替换的字符串:\t\t");
 scanf("%s",&str);
 char replace[MAX];
 printf("\t\t替换为:");
 scanf("%s",&replace);
   struct line *info;
 int i = 0, find_len, found = 0, position;
 char bijiao[MAX];
 info = start;
 int find_num = 0;             //匹配到的次数
 find_len = strlen(str);
 while (info)   //查询
 { 

  i = 0;  //行间循环
  while (i <= (strlen(info->text) - find_len))  //行内查找循环
  { int k=0;

   for(int j=i;j<i+find_len;j++)   // 行内的字符串从第一个开始按定长find_len赋给substring
   {
    bijiao[k] = info->text[j];
    k++;
   }
   if (strcmp(bijiao,str) == 0)
   {
    find_num++;
    delete2(info->num,i+1,find_len);
    insert2(replace,info->num,i+1);
    found = 1;
   }
    i++;
  }
  info = info->next;
 }
 if (found)  //查找成功
  printf("\t\t该内容替换的总次数为%d\n",find_num);
 else   //查找不成功
  printf("\t\t该内容不存在\n");
 printf("\t\t经过替换后的内容为:\n");
 PrintWord();

 } 

//文件录入方式菜单
void menu1()
{
 printf("\t\t|请选择录入方式    1:从键盘输入     2:从文件录入   |\n\t\t");
 int i;
 scanf("%d",&i);
 getchar();
  if(i>2||i<1)
 {
  printf("\t\t对不起,请输入正确的功能序号!\n");
 }
 switch(i)
 {
  case 1:
   scanf_load();
   system("cls");
   break;
  case 2:
   file_load();
   system("cls");
   break;
  }
}

//移动菜单
void menu_move()
{ 

 int choice;
 printf("\n\t\t|_____________________移动操作_______________________|\n");
 printf("\n\t\t|----->1.    向下移动一行                <-----------|\n");
 printf("\t\t|----->2.    向上移动一行                <-----------|\n");
 printf("\t\t|----->3.    向右移动一列                <-----------|\n");
 printf("\t\t|----->4.    向左移动一列                <-----------|\n");
 printf("\t\t|----->5.    返回上级菜单                <-----------|\n");
 printf("\t\t请选择");
 scanf("%d",&choice);
 int line_num,number;
 char str[2];
 switch (choice)
   {
   case 1:   // 向下移动一行

    printf("\t\t输人要移动的字符串所在行号:");
    scanf("%d", &line_num);
    struct line *info,*p;                    //新建一行空行
    info = (struct line *)malloc(sizeof(struct line));
    info->text[0] = ' ';
    info->text[1] = '\0';
    info->num = line_num;
    if (line_num == 1)    //插入在首行
    {
     info->next = start;
     start->prior = info;
     start = info;
     start->prior = NULL;
     p=start->next;
    }
    else  //插入在其他行
          {
          p=start;
       while (p->num != line_num)
     p = p->next;                    //令p指向插入行
    info->next=p;
    info->prior=p->prior;
    p->prior->next=info;
    p->prior = info;}
    while (p)   //插入行后面的行号都加1
     {
     p->num = p->num + 1;
     p = p->next;
     }
    break;
   case 2:   //向上移动一行
    printf("\t\t输入要移动的字符串所在行号:");
    scanf("%d",&line_num);
    delete1(line_num-1);
    break;
   case 3:   //向右移动一列
    printf("\t\t输人要移动的字符串所在行号:");
    scanf("%d", &line_num);
    printf("\t\t输入要移动的字符串所在列号:");
    scanf("%d", &number);
    str[0] = ' ';
    str[1] = '\0';
    insert2(str, line_num, number);
    break;
   case 4:   //向左移动
    printf("\t\t输入要移动的字符串所在行号:");
    scanf("%d", &line_num);
    printf("\t\t输入要移动的字符串所在列号:");
    scanf("%d", &number);
    if (number <= 0)
     printf("\t\t该列不存在");
    else
     delete2(line_num, number - 2, 1);
    break;
   case 5:   //退出移动
    break;

} 

}

//文本内容处理菜单
void menu2()
{
 char str1[20];
 char str2[20];
 int a;
do
{
 HeadWord();
 printf_time();
printf("\n\t\t ____________________________________________________\n");
printf("\t\t|           文章内容处理菜单                         |\n");
printf("\t\t|____________________________________________________|\n");
printf("\t\t|---->  1、查找文章中的字符或者字符串                |\n");
printf("\t\t|---->  2、删除文章中的字符或者字符串                |\n");
printf("\t\t|---->  3、向文章中插入字符或者字符串                |\n");
printf("\t\t|---->  4、移动文章字符或字符串                      |\n");
printf("\t\t|---->  5、替换文章字符或字符串                      |\n");
printf("\t\t|---->  6、返回主菜单                                |\n");
printf("\t\t|---->  7、直接退出系统                              |\n");
printf("\t\t|____________________________________________________|\n");
printf("\t\t    请选择:");
 scanf("%d",&a);
 switch(a)
 {
  case 1:
          system("cls");
         HeadWord();
           findstr();
      printf("\t\t按回车键继续·····");
    getchar();
       getchar();
    system("cls");
       break;
    case 2:
          system("cls");
          HeadWord();
          printf("\t\t|    1:删除一行文字    2:删除莫一行,莫列,定长的内容|\n\t\t");
          int delete_choice;
             scanf("%d",&delete_choice);
             getchar();
             if(delete_choice == 1)
            {
       int linenum;
       printf("\t\t当前文本为:\n");
       PrintWord();
                printf("\t\t请输入你删除行的行号:");
          scanf("%d",&linenum);
       getchar();
                delete1(linenum);
   }
             else if(delete_choice == 2)
   {
       int linenum, position,lenth;  //行,列,删除长度
       printf("\t\t当前文本为:\n");
       PrintWord();
          printf("\t\t请输入要删除内容所在行,列,删除内容字节长度,中间用空格隔开\n");
       printf("\t\t--->注意:汉字占两个字节\n\t\t");
       scanf("%d %d %d",&linenum,&position,&lenth);
       position = (position*2)-1;
       getchar();
       delete2(linenum,position,lenth);
   }
            printf("\t\t删除后的文章为:\n");
            PrintWord();
      printf("\t\t按回车键继续·····");
   getchar();
   getchar();
   system("cls");
      break;
      case 3:

         system("cls");
         HeadWord();
            printf("\t\t|   1:插入一行文字      2:插入文字到文本到一行的中间|\n\t\t");
            int insert_choice;
            scanf("%d",&insert_choice);
            if(insert_choice == 1)
            {
            printf("\t\t当前文本为:\n");
   PrintWord();
   insert1();}
            else
           {
            printf("\t\t当前文本为:\n");
   PrintWord();
      char str[MAX]; int linenum; int position;
      printf("\t\t输入插入位置一行号:");
   scanf("%d", &linenum);
   printf("\t\t输入插入位置-列号:");
   scanf("%d", &position);
   position = (position*2)-1;
   printf("\t\t要插入的字符串:");
   scanf("%s", str);
   insert2(str,linenum,position);
     }

            printf("\t\t插入字符或字符串后文章为:\n");
            PrintWord();
      printf("\t\t按回车键继续·····");
   getchar();
   getchar();
   system("cls");
      break;
case 4:
      system("cls");
      HeadWord();
   printf_time();
      menu_move();
      printf("\t\t移动后文本内容为:\n");
   PrintWord();
      printf("\t\t按回车键继续·····");
   getchar();
   getchar();
   system("cls");
      break;
case 5:

      system("cls");
      HeadWord();
      printf_time();
      replace();
      printf("\t\t按回车键继续·····");
   getchar();
   getchar();
   system("cls");
         break;
}
if(a==6)
{
 system("cls");
 break;
}
if(a==7)  exit(0);
}while(1);
}

//主菜单

void Mainmenu()
{
 printf("\n\n\n\n\n\n\n\n\n\t\t\tWelcom to use our TXT edition system!\n");
 printf("\n\n\t\t\t   欢迎您使用简易文本编辑器!\n");
 printf("\n\n\n\n\n\n\n\n\npress Enter to continue...");
 getchar();
 system("cls");
 int t;
 do{
 HeadWord();
 printf_time();
 printf("\n");
 printf("\t\t ____________________________________________________\n");
 printf("\t\t|                 主菜单                             |\n");
 printf("\t\t|                                                    |\n");
 printf("\t\t|---->  1、输入文章内容                              |\n");
 printf("\t\t|---->  2、进入文章内容处理菜单                      |\n");
 printf("\t\t|---->  3、显示当前文章内容                          |\n");
 printf("\t\t|---->  4、保存文本                                  |\n");
 printf("\t\t|---->  5、退出文本编辑器                            |\n");
 printf("\t\t|                                                    |\n");
 printf("\t\t|    注:第一次运行本程序时请选择功能1               |\n");
 printf("\t\t|____________________________________________________|\n");
 printf("  \t\t  请选择:");
 scanf("%d",&t);
 if(t>5||t<1)
 {
  printf("对不起,无此功能,请输入正确的功能序号!\n");
 }
 else
 switch(t)
 {
     case 1:
       system("cls");
       HeadWord();
       menu1();
    printf("\t\t按回车键继续·····");
    getchar();
    getchar();
    system("cls");
             break;
     case 2:
       system("cls");
       menu2();
    break;
  case 3:
       system("cls");
       HeadWord();
    printf_time();
    printf("\n\t\t ____________________文章内容为______________________\n");
             PrintWord();
    printf("\n");
    printf("\t\t按回车键继续·····");
    getchar();
    getchar();
    system("cls");
    break;
  case 4:
    HeadWord();
       save();
       break;

 }
 if(t==5) break;
 }while(1);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现简单的文本编辑器

    本文实例为大家分享了C语言实现简单的文本编辑器的具体代码,供大家参考,具体内容如下 预期实现三个功能,第一,可以对指定的行输入字符串:第二,删除指定行的字符串:第三,显示编辑器的行数和内容. 我们通过块链结构来实现本程序."块"的含义是每个块中可以存放多个字符,"链"的含义是块与块之间通过链表结构进行连接. IDE : Code::Blocks 17.12 Compiler : GNU GCC Compiler /*块链结构实现简单的文本编辑器*/ #include

  • C语言实现简易文本编辑器

    本程序要求完成一个简易文本编辑器,能够完成文本的录入.编辑.删除.查找,并能够完成文件的存取. 在文本编辑软件中把用户输入的所有文本内容作为一个字符串.虽然各种文本编辑软件的功能有强弱差别,但是基本操作都包括串的输入.修改.删除(包括整行删除和一行中的子串删除).查找.输出等.通过分析,系统应该包括以下功能: 1.具有简单的文字或图形菜单界面 2.能实现串或文本块的查找.替换.删除.插入.移动操作. 3.能实现文本文件的存盘和读取功能. 4.具有友好的界面和较强的容错能力 设计思路 1.采用的逻

  • C语言实现文本编辑器系统

    本文实例为大家分享了C语言实现文本编辑器系统的具体代码,供大家参考,具体内容如下 /*文本编辑器editor源代码*/ #include <stdio.h> #include <conio.h> #include <bios.h> #include <math.h> #define LEFT 0x4b00 /*←:光标左移*/ #define RIGHT 0x4d00 /*→:光标右移*/ #define DOWN 0x5000 /*↓键:光标下移*/ #d

  • C语言实现简易文本编译器

    数据结构课程设计之简易文本编译器(C语言实现) 需求分析 (1)具有图形菜单界面:显示实时年份,日期,星期及时间 (2) 查找:查找文本中的字符串,显示其出现的行数,列数及总共出现次数 替换(等长,不等长):对文本中的文本实现等长及不等长替换 插入(插串,文本块的插入):插入一行或在具体行号列号处插入文本 块移动(行块,列块移动):向下移动一行,向上移动一行, 具体行号列号处向左移动或向右移动 删除:删除一行,删除莫一行,莫列,定长的内容 (3)可正确存盘.取盘::可读取,保存文本: (4)正确

  • Java实现文本编译器

    简介 简单的文本编译器,可以通过弹出对话框打开文件,进行编写并保存文件. 代码 package Code.a; import java.io.*; import javax.swing.*; import java.awt.event.*; public class Editor implements ActionListener{     JFrame f;     JTextArea ta;     JScrollPane sp;     JMenuBar menubar;     JMen

  • 一个的简易文本编辑器源码

    一个简易文本编辑器,自己学习的第一个编辑器程序,共享一下,可以学习一下. ubb //initialize the iframe function window.onload() { Editor.document.designMode = "On"; Editor.document.open() ; Editor.document.write("") ; Editor.document.close(); Editor.focus (); } function On

  • 易语言取随机文本的实例教学

    易语言取随机文本 1.创建一个窗口,建一个编辑框和一个按钮 2.我们主要用分割文本的方法 将他分割成一个文本数组 在编辑框里内容随便写一些字,如:"你好|哈|易语言|作者最帅" 然后用你想用的符号分割,我用的是"|" 如下图: 3.开始写代码,创建一个文本型数组变量 把编辑框1.内容分割 4.取随机数 从1-最多数组里取一个数 我的文本是"你好|哈|易语言|作者最帅" 有四个成员,就是四个 所以就是从1和4间任意取一个数 5.信息框(文本型数组[

  • Vue 中使用富文本编译器wangEditor3的方法

    富文本编译器在vue中的使用 在开发的过程中由于某些特殊需求,被我们使用,今天我就简单讲一讲如何在vue中使用wangEditor3 首先讲一下简单的使用. 1.使用npm安装 npm install wangeditor --save 2.vue页面代码如下 <template> <section> <div id="div5"></div> <div id="div6"></div> <

  • C语言实现简易通讯录

    本文实例为大家分享了C语言实现简易通讯录的具体代码,供大家参考,具体内容如下 功能描述: 1.存储联系人的相关信息,包括姓名.性别.电话号码.备注 2.可输出通讯录全部信息 3.清空通讯录的 4.用户交互界面 5.插入新联系人信息 6.查找联系人,包括"按姓名查找"和"按电话号查找"两种 7.删除联系人,包括"按姓名删除"和"按电话号删除"两种 8.按性别筛选联系人信息 在本次通讯录的编写代码中,涉及到了C高级和数据结构的一些

  • C语言实现简易扫雷游戏

    本文实例为大家分享了C语言实现简易扫雷游戏的具体代码,供大家参考,具体内容如下 扫雷 楔子: 扫雷游戏是我们小时候无聊时消磨时间的小玩意,虽然更新到Win10系统后经典的扫雷游戏不再了,不过它现在仍以一种抓虫子的游戏形式存在于Windows这个系统平台,不禁感慨游戏还是那个游戏,不过人已经不是那些人了啊. 其实扫雷游戏的实现也主要运用了数组和函数封装与调用的知识,具体请看程序. 以下为程序主体: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>

  • C++实现简易文本编辑器

    本文实例为大家分享了C++实现文本编辑器的具体代码,供大家参考,具体内容如下 1.简易文本编辑器 2.用链表实现,保存到文件中 #include<iostream> #include<string> #include<cstdlib> #include<ctype.h> #include<cstdio> #include<fstream> using namespace std; int NumberCount=0;//数字个数 in

  • C语言实现简易通讯录功能

    本文实例为大家分享了C语言实现简易通讯录的具体代码,供大家参考,具体内容如下 这两天用C语言编写了一个简易版通讯录(学生信息管理) ,大致功能有添加信息,查看信息(自动按姓名排序,printf输出带颜色字体),查找信息(按姓名查找),删除信息(输入姓名删除相关信息),修改信息(输入修改人的名字,可选择修改其任意信息)和退出 . #include <stdio.h> #include <string.h> #include <stdlib.h> #define SIZE

随机推荐