⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edline.txt

📁 耿国华高教出版社的《数据结构》的光盘(C语言)
💻 TXT
字号:
#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;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -