```cpp
```cpp
#include<iostream>
#include<stdio.h>
using namespace std;
typedef class bunch
{
public:
char a;
bunch *next;
}*LinkBunch,Link;
void creat_LinkBunch(LinkBunch &L,char t[]);
void strcopy(LinkBunch &L1,LinkBunch L2); //将L2复制到L1,使用尾插法
int StrLength(LinkBunch &L);
LinkBunch Conact(LinkBunch &L1,LinkBunch &L2);//串连接的方法L2连接到L1后面
LinkBunch SubStr(LinkBunch &L,int i,int j); //求从i个开始连续j个的字符子串
LinkBunch InsStr(LinkBunch &L1,int i,LinkBunch &L2);//将L2插入到L1中第i个元素的位置
LinkBunch DelStr(LinkBunch &L1,int i,int j);//删除 第i个开始连续j个子字符串
void printlist(LinkBunch &L);
int main()
{
int i,j;
LinkBunch L1,L2;
char a[30];
gets(a);
creat_LinkBunch(L1,a);
printlist(L1);
cout<<"第几个位置开始"<<endl;
cin>>i;
cout<<"连续几个"<<endl;
cin>>j;
LinkBunch L=DelStr(L1,i,j);
printlist(L);
/*gets(a);
creat_LinkBunch(L2,a);
printlist(L2);
cout<<"你想插在第几个位置"<<endl;
cin>>i;
LinkBunch L=InsStr(L1,i,L2);
printlist(L);
/*strcopy(L2,L1);
printlist(L2);
LinkBunch L=Conact(L1,L2);
printlist(L);
cout<<"从几个开始"<<endl;
cin>>i;
cout<<"到几个结束"<<endl;
cin>>j;
L=SubStr(L,i,j);
printlist(L);*/
return 0;
}
void creat_LinkBunch(LinkBunch &L,char t[])//ok
{
L=new Link;
L->next=NULL;
LinkBunch s,rear;
rear=L;
int i=0;
while(t[i]!='\0')
{
s=new Link;
s->a=t[i];
s->next=rear->next;
rear->next=s;
rear=s;
i++;
}
rear->next=NULL;
}
void strcopy(LinkBunch &L1,LinkBunch L2) //将L2复制到L1,使用尾插法//ok
{
L1=new Link;
L1->next=NULL;
LinkBunch s,rear,p;
rear=L1;
p=L2->next;
while(p!=NULL)
{
s=new Link;
s->a=p->a;
s->next=rear->next;
rear->next=s;
rear=s;
p=p->next;
}
rear->next=NULL;
}
int StrLength(LinkBunch &L)
{
LinkBunch p=L->next;
int i=0;
while(p!=NULL)
{
i++;
p=p->next;
}
return i;
}
LinkBunch Conact(LinkBunch &L1,LinkBunch &L2)//串连接的方法L2连接到L1后面//ok
{
LinkBunch L=new Link;
L->next=NULL;
LinkBunch s,rear=L;
LinkBunch p=L1->next;
while(p!=NULL)
{
s=new Link;
s->a=p->a;
s->next=rear->next;
rear->next=s;
rear=s;
p=p->next;
}
rear->next=NULL;
p=L2->next;
while(p!=NULL)
{
s=new Link;
s->a=p->a;
s->next=rear->next;
rear->next=s;
rear=s;
p=p->next;
}
return L;
}
LinkBunch SubStr(LinkBunch &L,int i,int j) //求从i个开始连续j个的字符子串//ok
{
LinkBunch q=new Link;
LinkBunch s,rear;
q->next=NULL;
rear=q;
LinkBunch p=L->next;
if(i>StrLength(L)||i<1||j<1||i+j>StrLength(L)+1)
{
return q;
}
int k=1;
while(k<=i-1)
{
p=p->next;
k++;
}
while(j>=1)
{
s=new Link;
s->a=p->a;
s->next=rear->next;
rear->next=s;
rear=s;
p=p->next;
j--;
}
return q;
}
LinkBunch InsStr(LinkBunch &L1,int i,LinkBunch &L2)//将L2插入到L1中第i个元素的位置//ok
{
LinkBunch L=new Link;
L->next=NULL;
if(i<0||i>StrLength(L1)+1)
{
return L;
}
LinkBunch p=L1->next,q=L2->next;
LinkBunch s,rear=L;
int k=1;
while(k<i)
{
s=new Link;
s->a=p->a;
s->next=rear->next;
rear->next=s;
rear=s;
p=p->next;
k++;
}
while(q!=NULL)
{
s=new Link;
s->a=q->a;
s->next=rear->next;
rear->next=s;
rear=s;
q=q->next;
}
while(p!=NULL)
{
s=new Link;
s->a=p->a;
s->next=rear->next;
rear->next=s;
rear=s;
p=p->next;
}
return L;
}
LinkBunch DelStr(LinkBunch &L1,int i,int j)//删除 第i个开始连续j个子字符串
{
LinkBunch L=new Link;
L->next=NULL;
LinkBunch rear;
rear=L;
LinkBunch s;
LinkBunch p=L1->next;
if(i<1||i>StrLength(L1)||i+j-1>StrLength(L1)||j<1)
{
return L;
}
int k=1;
while(k<i)
{
s=new Link;
s->a=p->a;
s->next=rear->next;
rear->next=s;
rear=s;
p=p->next;
k++;
}
k=1;
while(k<=j)
{
p=p->next;
k++;
}
while(p!=NULL)
{
s=new Link;
s->a=p->a;
s->next=rear->next;
rear->next=s;
rear=s;
p=p->next;
}
return L;
}
void printlist(LinkBunch &L)
{
LinkBunch p=L->next;
if(p==NULL)
{
return ;
}
else
{
while(p!=NULL)
{
cout<<p->a;
p=p->next;
}
}
cout<<endl;
}