《数据结构》读书笔记 第四章 文本编辑

文本编辑 有点BT啊……

#include <fstream>
#include "D:\数据结构\第四章 堆分配的串及其基本操作\HString.h"
enum {ML=25,MLL=75,MNL=20};
HString T[ML];
char str[MLL],filename[MNL]="";
int n=0;
using namespace std;

void Open()
{
 if(filename[0]!='\0')
  cout<<"文件已经打开!"<<endl;
 else
 {
  cout<<"请输入文件名(最大"<<MNL<<"个字符):";
  cin>>filename;
  fstream File(filename);
  if(!File)
   cout<<"新文件"<<endl;
  else
  {
   while(!File.eof())
   { 
    File.getline(str,MLL);
    if(n>=ML)
    {
     cout<<"文件太大"<<n;
     return ;
    }
    StrAssign(T[n],str);
    n++;
   }
   File.close();
  }
 }

}

void Print()
{
 int i;
 for(i=0;i<n;i++)
 {
  cout<<i+1<<": ";
  StrPrint(T[i]);
 }
}

void Insert()
{
 int i,L,M;
 cout<<"在第L行前面插入M行,输入L M:";
 cin>>L>>M;
 if(L+M>ML)
 {
  cout<<"输入过多,即将退出该过程!"<<endl;
  return ;
 }
 if(M<0||L-1>n)
  cout<<"行数超出范围!"<<endl;
 else
 {
  for(i=n-1;i>=L-1;i--)
   T[i+M]=T[i];
  n+=M;
  cout<<"请顺序输入待插入内容:"<<endl;
  for(i=L-1;i<L+M-1;i++)
  {
   cin>>str;
   StrInit(T[i]);
   StrAssign(T[i],str);
  }
  cout<<"插入完成!"<<endl;
 }
}

void Delete()
{
 int i,L,M;
 cout<<"从第L行起删除M行请输入L M:";
 cin>>L>>M;
 if(L<0||L+M>n+1)
  cout<<"输入的行范围错误!"<<endl;
 else
 {
  for(i=L+M-1;i<=n-1;i++)
  {
   StrInit(T[i-M]);
   T[i-M]=T[i];
  }
  for(i=L+M;i<n;i++)
   StrInit(T[i]);
  n-=M;
  cout<<"删除完成!"<<endl;
 }
}

void Copy()
{
 int i,L,M,K;
 cout<<"把L行开始的M行插入在K行的前面,输入L M K:";
 cin>>L>>M>>K;
 if(n>=K-1&&L+M-1<=n&&(K>=L+M||K<=L))
 {
  for(i=n-1;i>=K-1;i--)
   T[i+M]=T[i];
  n+=M;
  if(K<=L)
   L+=M;
  for(i=L-1;i<L-1+M;i++)
  {
   StrInit(T[i+K-L]);
   StrCopy(T[i+K-L],T[i]);
  }
 }
 else
  cout<<"错误!";
}

void Modify()
{
 int i;
 cout<<"请输入要修改的行号:";
 cin>>i;
 if(i>n)
  cout<<"错误的行号!"<<endl;
 else
 {
  cout<<"请输入要改写为的内容:";
  cin>>str;
  StrAssign(T[i-1],str);
 }
}

void Search()
{
 int i,k,f=-1;
 HString H;
 char b[2];
 cout<<"请输入要查找的字符串:";
 cin>>str;
 StrInit(H);
 StrAssign(H,str);
 for(i=0;i<n&&f;i++)
 {
  k=1;
  while(k)
  {
   k=Index(T[i],H,k);
   if(k)
   {
    cout<<"第"<<i<<"行,";
    cout<<"第"<<k<<"个字符找到,继续吗?(Y/N)";
    cin>>b;
    if(b[0]!='Y'&&b[0]!='y')
    {
     f=0;
     break;
    }
    else
     k++;
   }
  }
 }
 if(f)
  cout<<"没有找到!"<<endl;
}

void Save()
{
 int i;
 ofstream File(filename);
 if(!File)
 {
  cout<<"存盘失败!";
  return ;
 }
 for(i=0;i<n;i++)
 {
  File.write(T[i].chars,T[i].len);
  if(i!=n-1)
   File<<endl;
 }
 File.close();
 cout<<"保存完成!"<<endl;
}

int main()
{
 int i;
 for(i=0;i<ML;i++)
  StrInit(T[i]);
 while(i)
 {
  cout<<"请选择: 1.打开文件 2.显示文件内容"<<endl;
  cout<<"         3.插入行   4.删除行"<<endl;
  cout<<"         5.拷贝行   6.修改行"<<endl;
  cout<<"         7.查找字符串   "<<endl;
  cout<<"         8.存盘     0.退出"<<endl;
  cin>>i;
  switch(i)
  {
  case 1:
   Open();
   break;
  case 2:
   Print();
   break;
  case 3:
   Insert();
   break;
  case 4:
   Delete();
   break;
  case 5:
   Copy();
   break;
  case 6:
   Modify();
   break;
  case 7:
   Search();
   break;
  case 8:
   Save();
   break;
  case 0:
   break;
  default:
   cout<<"错误,重新选择!"<<endl;
  }
 }
 
 //Open();
 //Print();
 //Delete();
 //Insert();
 //Copy();
 //Modify();
 //Search();
 //Save();
 //Print();
 return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *