你在函数内给形参malloc内存,这些内存在函数返回时会被回收,因此相当于你没有分配内存。
解决的方法就是在main中分配内存,而不是在create中,或者也可以将create函数改一下:
Sqstring *StrCreate()
{
int i
s=(Sqstring*)malloc(sizeof(Sqstring))
printf("请输入字符串(长度不超过%d)!\n",Maxsize)
for(i=0i<Maxsizei++)
{
scanf("%c",s->data[i])
if(s->data[i]=='1')
break
}
s->length=i
return s
}
调用时先声明一个串指针
Sqstring *s
s = StrCreate()
这样就可以了
/***KMP算法是对蛮力算法的优化,原理很简单。但存在最坏情况,时间复杂度很可能会崩坏到O(m+n)。* 推荐在高频度数据查找采用优化的Boyer-Moore算法。
*以下为代码
***/
/***首先创建一个ADT,这里给出最简形式,省略部分涉及不到的操作***/
ADT String
{voidStrAssign(SString &T,char*S)//值为S的串T
bool SreEmpty(SString &S) //判断空串
int StrLength(SString &s) //返回长度
void Concat (SString &T,SString&S1,SString &S2)//返回组合的新串
void SubString (SString &Sub,SString &S,int pos, int len)//同串则返回第pos后的串的最初位置,否则为0
}
/***算法部分***/
int KMP(char *T,char *p)
{int n=strlen(T)
int m=strlen(P)
int i,j
for(i=0i<n-mi++)
{j=0
while(j<m&&T[i+j]==P[j])j++
if(j==m) return i
}
return -1}