文本编辑 有点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;
}