// algo4-2.cpp 文本行编辑
#include"c1.h"
#include"c4-2.h" // 采用串的堆分配存储结构
#include"bo4-2.cpp" // 串的堆分配基本操作
#define MAX_LEN 25 // 文件最大行数
#define LINE_LEN 75 // 每行字符数最大值+1
#define NAME_LEN 20 // 文件名最大长度(包括盘符、路径)+1
// 全局变量(见图4.12)
HString T[MAX_LEN];
char str[LINE_LEN],filename[NAME_LEN]="";
FILE *fp;
int n=0; // 文本行数
void Open()
{ // 打开文件(新或旧)
if(filename[0]) // 文件已打开
printf("已存在打开的文件\n");
else
{
printf("请输入文件名(可包括盘符、路径,不超过%d个字符): ",NAME_LEN-1);
scanf("%s",filename);
fp=fopen(filename,"r"); // 以读的方式打开文件
if(fp) // 已存在此文件
{
while(fgets(str,LINE_LEN,fp)) // 由文件读入1行字符成功
{
str[strlen(str)-1]=0; // 将换行符10强制改为串结束符0
if(n>=MAX_LEN)
{
printf("文件太大\n");
return;
}
StrAssign(T[n],str);
n++;
}
fclose(fp); // 关闭文件
}
else
printf("新文件\n");
}
}
void List()
{ // 显示文本内容
int i;
for(i=0;iMAX_LEN)
{
printf("插入行太多\n");
return;
}
if(n>=l-1&&l>0)
{
for(i=n-1;i>=l-1;i--)
T[i+m]=T[i];
n+=m;
printf("请顺序输入待插入内容:\n");
for(i=l-1;i=l+m-1&&l>0)
{
for(i=l-1+m;i=k-1&&n>=l-1+m&&(k>=l+m||k=k-1;i--)
T[i+m]=T[i];
n+=m;
if(k |