#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char ch; //字符域
struct node *next; //指针域,存放下一个结点的地址
}*linkstr;
int length;
linkstr NullString()
{
linkstr s;
s=(linkstr)malloc(sizeof(node));
if(s!=NULL)
s->next=NULL;
return s;
}
linkstr Push()
{
linkstr head;
linkstr p1,p2;
length=0;
p1=p2=(linkstr)malloc(sizeof(node));
printf("输入串:");
scanf("%c",&p1->ch);
head=NULL;
while(p1->ch!='\n')
{
length++;
if(length==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(linkstr)malloc(sizeof(node));
scanf("%c",&p1->ch);
}
p2->next=NULL;
return(head);
}
int substr(linkstr s,int i,int len,linkstr t)
{
linkstr p,q,r,u;
if(i<=0 || i>length|| i+len-1>length )
return 0;
int j,k;
for(j=0,p=s;j<i-1;j++)
p=p->next;
for(k=0,r=t,q=t->next;k<len;k++)
{
if(q!=NULL)
{
q->ch=p->ch;
r=q;
q=q->next;
}
else
{
u=(linkstr)malloc(sizeof(node));
u->ch=p->ch;
r->next=u;
r=u;
}
p=p->next;
}
while(q!=NULL)
{
p=q->next;
free(q);
q=p;
}
r->next=NULL;
return 1;
}
void print(linkstr s)
{
linkstr p=s->next;
while(p!=NULL)
{
printf("%c",p->ch);
p=p->next;
}
printf("\n");
}
int main()
{
linkstr s1,s2;
s2=NullString();
int m,n;
s1=Push();
printf("截取子串:");
scanf("%d%d",&m,&n);
substr(s1,m,n,s2);
print(s1);
print(s2);
return 0;
}