文本编辑器

简易文本编辑器


           文本编辑器是我们常用的应用软件,本文用C/C++语言实现了对指定文件内容进行清空、查找、删除、插入、替换、保存的基本功能。

       1.模块划分与设计

           本文利用数组的形式,将文件的内容读取到数组内,相应的操作也就转变为对数组的操作,进行保存时只需将当前数组中的内容写回文本即可。

           根据文本编辑器要实现的功能,将其划分为以下几个模块:

         (1)清空文件内容:通过将数组中的内容将清空然后写回文本来实现清空文件的功能;

                  void Clear(char text[]); 

          (2)显示文本信息:遍历数组内容,并输出;

                     void show(char text[]);

          (3)查找功能:查找文本中的指定信息,运用模式匹配,查找指定信息在文本中的行和列,以此实现查找功能。下面的删除、插入、替换功能的实现都是基于此功能。

                     int  match(char text[],char t[],int len,int l);  //模式匹配
                     int  Search(char text[],int l); 

          (4)删除功能:通过移动数组中元素向前移动位置,实现删除功能。

                     void Replace(char text[],int l);

          (5)插入功能:通过移动数组中元素向后移动位置,实现插入功能。

                     void Insert(char text[],int l);

          (6)替换功能:替换过程中,在移动数组中元素时,需要注意要替换的信息与被替换的信息的长度大小关系,大小不同移动的方式不同。

                     void Replace(char text[],int l); 

          (7)保存功能:将数组中的内容写回文本中。

                     void Save(char text[]);  

          (8)退出:结束主函数运行。退出时要注意文本内容是否保存,若未保存,应对用户进行提示。

                    void Exit(int save_num); 

          从上面可以看出,该程序设计的主要算法是模式匹配,本文中采用的是暴力搜索,可用KMP算法对该程序进行改进。

 

         2.程序流程

                                         文本编辑器_第1张图片

         3.代码

#include
#include 
#define MAX 999
int  save_num=0;                                 // 0 未保存  1 已保存
int  ntext=0;
char text[MAX];
char name[30]="";                                //文件名
void menu();                                     //主界面
void Open(char text[]);                          //打开文件
void show(char text[]);                          //打印文件内容
void Clear(char text[]);                         //清空文件内容
int  match(char text[],char t[],int len,int l);  //模式匹配
int  Search(char text[],int l);                  //查找文件内容
void Insert(char text[],int l);                  //插入新内容
void Delete(char text[],int l);                  //删除
void Replace(char text[],int l);                 //替换
void Save(char text[]);                          //保存文件
void Exit(int save_num);                         //退出
using namespace std;
int main()
{
        Open(text);
        return 0;
}

void menu()
{
loop:
        system("cls");
        cout<<"       简易文本编辑器"<>n;
        if(n>=0&&n<=7)
        {
                switch(n)
                {
                        case 1:Clear(text);break;
                        case 2:Search(text,0);break;
                        case 3:Insert(text,0);break;
                        case 4:Delete(text,0);break;
                        case 5:Replace(text,0);break;
                        case 6:show(text);break;
                        case 7:Save(text);break;
                        case 0:Exit(save_num);break;
                }
        }
        else
        {
                cout<<"输入有误,按任意键返回..."<>a;
                if(a=='B')
                {
                        Save(text);
                }
                exit(0);
        }
}

void Save(char text[])
{
        system("cls");
        FILE *fp;
        fp=fopen(name,"w+");
        for(int i=0;i=len)
                return (l1-len);        //返回匹配的第一个字符下标
        else
                return -1;      //匹配失败
}

int Search(char text[],int l)
{
        system("cls");
        show(text);
        int len,a,len1;
        cout<<"输入要查找的内容:"<>s;
                if(s=='A')
                {
                        l==0;Search(text,l);
                }
                else if(s=='B')
                        return 0;
        }
        else if(a!=-1)
        {
                l=a+len;
                for(int i=0;i>s1;
                if(s1=='A')
                {
                        if(l==len1-1){
                                cout<<"返回到文件开头第一个位置"<>s1;
                if(s1=='A')
                {
                        if(l==len1-1){
                                cout<<"返回到文件开头第一个位置"<=a;i--)
                                text[i+len2]=text[i];
                        for(int j=0;j>s1;
                if(s1=='A')
                {
                        if(l==len1-1){
                                cout<<"返回到文件开头第一个位置"<>s1;
                if(s1=='A')
                {
                        if(l==len1-1){
                                cout<<"返回到文件开头第一个位置"<=len)
                        {
                                for(int i=ntext;i>=a+len;i--)
                                        text[i+len2-len]=text[i];
                                for(int j=0;j

4.部分功能测试结果

文本编辑器_第2张图片

文本编辑器_第3张图片

文本编辑器_第4张图片

文本编辑器_第5张图片

 

你可能感兴趣的:(文本编辑系统,C/C)