急啊,,菜鸟不知道该怎么办了!!!
#include <iostream.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct node
{ char ch[MaxSize];
char data;
struct node *next;
}LinkString;
void Assign(LinkString *&s,char t[])
{
int i=0;
LinkString *q,*tc;
s=(LinkString *)malloc(sizeof(LinkString));
s->next=NULL;
tc=s;
while (t[i]!='\0')
{
q=(LinkString *)malloc(sizeof(LinkString));
q->data=t[i];
tc->next=q;tc=q;
i++;
}
tc->next=NULL;
}//串赋值
void StrCopy(LinkString *&s,LinkString *t)
{
LinkString *p=t->next,*q,*tc;
s=(LinkString *)malloc(sizeof(LinkString));
s->next=NULL;
tc=s;
while(p!=NULL)
{
q=(LinkString *)malloc(sizeof(LinkString));
q->data=p->data;
tc->next=q;tc=q;
p=p->next;
}
tc->next=NULL;
}//串复制
int StrLength(LinkString *s)
{
int i=0;
LinkString *p=s->next;
while (p!=NULL)
{
p=p->next;i++;
}
return i;
}//求串长
int StrEqul(LinkString *s,LinkString *t)
{
LinkString *p=s->next,*q=t->next;
while(p!=NULL&&q!=NULL)
{ if(p->data!=q->data)
return 0;
p=p->next;
q=q->next;
}
if(p!=NULL||q!=NULL)
return 0;
return 1;
}//判断
LinkString *Concat(LinkString *s,LinkString *t)
{
LinkString *p=s->next,*q,*r,*tc;
r=(LinkString *)malloc(sizeof(LinkString));
r->next=NULL;
tc=r;
while(p!=NULL)
{
q=(LinkString *)malloc(sizeof(LinkString));
q->data=p->data;
tc->next=q;tc=q;
p=p->next;
}
p=t->next;
while(p!=NULL)
{
q=(LinkString *)malloc(sizeof(LinkString));
q->data=p->data;
tc->next=q;tc=q;
p=p->next;
}
tc->next=NULL;
return r;
}//串连接
LinkString *SubStr(LinkString *s,int i,int j)
{
int k=1;
LinkString *p=s->next,*tc,*r,*q;
r=(LinkString *)malloc(sizeof(LinkString));
r->next=NULL;
tc=r;
while(k<i&&p!=NULL)
{
p=p->next;k++;
}
if(p!=NULL)
{
k=1;
while(k<=j&&p!=NULL)
{
q=(LinkString *)malloc(sizeof(LinkString));
q->data=p->data;
tc->next=q;tc=q;
p=p->next;
k++;
}
tc->next=NULL;
}
return r;
}//求子串
int Index(LinkString *s,LinkString *t)
{
int i=0;
LinkString *p=s->next,*q,*p1,*q1;
while(p!=NULL)
{
q=t->next;
if(p->data==q->data)
{
p1=p->next;
q1=q->next;
while(p1!=NULL&&q1!=NULL&&p1->data==q1->data)
{
p1=p1->next;
q1=q1->next;
}
if(q1==NULL)
return i;
}
p=p->next;i++;
}
return -1;
}//查找子串位置
int InsStr(LinkString *&s,int i,LinkString *t)
{
LinkString *q=s->next,*p,*r;
int k;
StrCopy(r,t);
q=r;r=r->next;free(p);
for(k=1;k<i;k++)
{
if(q==NULL)
return 0;
p=q;
q=q->next;
}
p->next=r;
while(r->next!=NULL)
r=r->next;
r->next=q;
return 1;
}//子串插入
int DelStr(LinkString *&s,int i,int j)
{
int k;
LinkString *q=s->next,*p,*t;
for(k=1;k<i;k++)
{
if(q==NULL)
return 0;
p=q;
q=q->next;
}
for(k=1;k<=j;k++)
{
if(q==NULL)
return 0;
t=q;
q=q->next;
free(t);
}
p->next=q;
return 1;
}//子串删除
LinkString *RepStrAll(LinkString *s,LinkString *s1,LinkString *s2)
{
int i;
i=Index(s,s1);
while(i>0)
{
DelStr(s,i,StrLength(s1));
InsStr(s,i,s2);
i=Index(s,s1);
}
return s;
}//子串替换
void DispStr(LinkString *s)
{
LinkString *p=s->next;
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
cout<<endl;
}
void main()
{ char a,b,c,d,m,n,p,q,f,g,h;
int i;
a="jfdaksfjsaof";
b="sfjsaof";
g="fwegreg";
h="fdsgijs";
cout<<"第一个串为:"<<endl;
DispStr(a);
cout<<"串长为:"<<StrLength(a)<<endl;
cout<<"第二个串为:"<<endl;
DispStr(b);
cout<<"串长为:"<<StrLength(b)<<endl;
cout<<"串复制运算:"<<endl;
StrCopy(m,a);
StrCopy(n,b);
DispStr(m);
DispStr(n);
cout<<"判断两个串是否相等"<<endl;
c=Assign(m,a);
d=Assign(n,b);
DispStr(c);
DispStr(d);
cout<<"这两个串不相等"<<endl;
p="kijui";
cout<<"将串p连接到a"<<endl;
q=Concat(a,p);
DispStr(q);
cout<<"将串p连接到b"<<endl;
q=Concat(b,p);
DispStr(q);
cout<<"求串a中第3个位置的3个字符组成的串f"<<endl;
f=SubStr(a,3,3);
DispStr(f);
cout<<"查找串b在串a中的位置"<<endl;
i=Index(a,b);
cout<<i<<endl;
cout<<"将子串g插入到a中第3个位置"<<endl;
InsStr(a,3,g);
DispStr(a);
cout<<"删除串a中第3个位置开始的3个字符"<<endl;
DelStr(a,3,3);
DispStr(a);
cout<<"子串h替换子串b"<<endl;
i=Index(a,b);
DelStr(a,i,StrLength(b));
InsStr(a,i,h);
DispStr(a);
}
主函数我都写好了,,但我不知道错在哪,,大哥,大姐们能帮我一下啊,,