#include "stdio.h"
#include <stdlib.h>
#include <string.h>
/*定义块链结构,每行作为一个结点,有80个字符*/
typedef struct BLOCK {
char ch[80];
struct BLOCK *next;
}Node,*LinkString;
LinkString L;
void getnum(char sel[],int *n1,int *n2,int line)
{/*将存放在sel中的字符串分解出n1和n2*/
int i,k1,k2,flag=0;
k1=0;k2=0;i=1;
while(sel[i]!='\0')
if (sel[i]>='0'&&sel[i]<='9')
{
k1=k1*10+(sel[i]-'0');
flag=1;
i++;
}
else
if (sel[i]==',')
{
flag=2;
i++;
break;
};
//printf("哈哈");
while(sel[i]!='\0') {
if (sel[i]>='0'&&sel[i]<='9')
{k2=k2*10+(sel[i]-'0');i++;}
else break;
};
switch (sel[0]) {
case 'L':
case 'l':
case 'D':
case 'd':
if (k1==0) *n1=line;
else *n1=k1;
if (k2==0) *n2=*n1+10;
else *n2=k2;
if (flag==1) *n2=*n1;
if (flag==0) {
*n1=line;*n2=line+10;
}
break;
case 'I':
case 'i':
case 'E':
case 'e':
if (k1==0) *n1=line;
else *n1=k1;
break;
}
}
void loadfile(char filename[])
/*从磁盘读取指定的文件并存放在块链表中*/
{
FILE *fp;
int i;
char c;
LinkString p,q;
fp=fopen(filename,"r");
if (fp==NULL) exit(0);
i=0;p=L;
q=(LinkString)malloc(sizeof(Node));
while((c=getc(fp))!=EOF) {
q->ch[i++]=c;
if (c==10) {
q->ch[i]='\0';
q->next=NULL;
p->next=q;p=q;
q=(LinkString)malloc(sizeof(Node));
i=0;
}
}
}
void savefile(char filename[])
/*将存放在块链表中的字符存放到磁盘文件filename中*/
{
FILE *fp;
//int i,j;
//char c;
LinkString p;
fp=fopen(filename,"w");
if (fp==NULL) exit(0);
p=L->next;
while(p) {
fprintf(fp,"%s",p->ch);
p=p->next;
}
fclose(fp);
}
int display(int n1,int n2)
/*在屏幕上显示文件中第n1行到第n2行的内容*/
{
LinkString p,q,s;
int i,k;
if (n1>n2) return(0);
p=L->next;i=0;
while (p!=NULL&&i<n1) {
p=p->next;i++;
}
if (!p) return(0);
q=p->next;
while (q!=NULL&&i<n2) {
q=q->next;i++;
}
s=p;i=n1;
while (s!=q) {
k=0;printf("%2d:",i);
while (s->ch[k]!='\0') {printf("%c",s->ch[k]);k++;}
s=s->next;
i++;
}
return(1);
}
int deletechar(int n1,int n2)
/*删除文件中第n1行到第n2行的内容*/
{
LinkString p,q,s;
int i;
if (n1>n2) return(0);
p=L;i=0;
while (p!=NULL&&i<n1) {
p=p->next;i++;
}
if (!p) return(0);
q=p->next;
while (q!=NULL&&i<=n2) {
q=q->next;i++;
}
s=p->next;p->next=q;
while (s!=q) {
p=s->next;free(s);
s=p;
}
return(1);
}
int edit(int n1)
/*修改文件中第n1行的内容*/
{
LinkString p;
int i,k;
char str[80];
p=L->next;i=0;
while (p!=NULL&&i<n1) {
p=p->next;i++;
}
if (!p) return(0);
printf("Old Line(%d):",n1);
for (k=0;p->ch[k]!='\0';k++) printf("%c",p->ch[k]);
printf("New Line(%d):",n1);gets(str);
for(k=0;str[k]!='\0';k++)
p->ch[k]=str[k];
p->ch[k++]=10;
p->ch[k]='\0';
return(1);
}
int insert(int n1)
/*在文件中第n1行之前插入一行*/
{
LinkString p,s;
int i,k;
char str[80];
p=L;i=0;
while (p!=NULL&&i<n1) {
p=p->next;i++;
}
if (!p) return(0);
s=(LinkString) malloc(sizeof(Node));
printf("New Line(%d):",n1);gets(str);
for(k=0;str[k]!='\0';k++)
s->ch[k]=str[k];
s->ch[k++]=10;
s->ch[k]='\0';
s->next=p->next;
p->next=s;
return(1);
}
void main(int argc,char *argv[])
{
char sel[50],string[80];
int n1,n2,cur_line=0,flag=0;
L=(LinkString)malloc(sizeof(Node));
L->next=NULL;/*生成头结点*/
// strcpy(string,argv[1]);
/*打开文件*/
if (argc>=2) loadfile(string);
else {
printf("Input FileName:");
scanf("%s",string);
getchar();
loadfile(string);
}
/*从键盘接受一个字符串,转换为命令和参数*/
while (1) {
printf(">>");
/*gets(sel);*/
fflush(stdin);
scanf("%s",sel);
getnum(sel,&n1,&n2,cur_line);/*将接受的字符串转换为参数n1,n2*/
switch(sel[0]) {/*分别调用函数完成相应功能*/
case 'S':
case 's': flag=1;savefile(string);break;
case 'Q':
case 'q': flag=1;break;
case 'L':
case 'l': display(n1,n2);break;
case 'D':
case 'd': deletechar(n1,n2);display(0,10);break;
case 'I':
case 'i': insert(n1);break;
case 'E':
case 'e': edit(n1);break;
}
if (flag) break;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
数据结构 耿国华(源码).rar (693个子文件)
car.c 8KB
8_9.c 3KB
9_15.c 2KB
9_14.c 2KB
6_11.c 2KB
3.13.c 2KB
7.15.c 1KB
5.4.c 1KB
8_12.c 1KB
2_22.c 1KB
ma.c 1KB
7.10.c 1KB
7.1.c 1KB
3.12.c 1KB
8_8.c 1KB
7.2.c 987B
7.14.c 985B
doctor.c 946B
7.13.c 939B
6_19.c 920B
5.3.c 891B
6_20.c 876B
7.9.c 870B
9_6.c 867B
6_22b.c 857B
7.16.c 842B
3.24.c 838B
5.2.c 829B
6_25.c 794B
7.11.c 779B
4_1.c 777B
6_23b.c 719B
2_13.c 703B
9_8.c 681B
4_10.c 681B
9_3.c 676B
2_11.c 671B
2_12.c 664B
8_10.c 647B
6_26.c 614B
2_16.c 608B
6_18.c 602B
6_12.c 594B
2_4.c 588B
9_2.c 580B
7.7.c 557B
4_14.c 557B
2_21.c 538B
2_2.c 534B
7.8.c 533B
6_6.c 530B
4_8.c 527B
9_11.c 526B
2_7.c 523B
3.25.c 505B
6_22a.c 496B
8_4.c 467B
8_3.c 462B
4_11.c 457B
5.10.c 457B
6_13.c 448B
3.14.c 430B
3.15.c 427B
8_15.c 426B
8_6.c 426B
2_17.c 424B
9_4.c 420B
7.3.c 419B
2_14.c 415B
9_1.c 413B
2_3.c 411B
2_8.c 408B
8_7.c 401B
3.20.c 395B
4_12.c 394B
6_8.c 393B
6_9.c 389B
9_10.c 386B
9_12.c 386B
6_15.c 382B
6_7.c 372B
8_14.c 372B
9_7.c 368B
5.9-1.c 367B
5.8.c 366B
7.4.c 364B
3.7.c 362B
2_15.c 360B
4_13.c 353B
3.19.c 349B
3.6.c 343B
2_6.c 341B
6_23a.c 337B
2_1.c 335B
7.12.c 330B
6_21.c 327B
4_15.c 327B
3.10.c 326B
4_2.c 325B
2_9.c 324B
共 693 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
Garin_K
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功