【正确答案】对函数index()稍加改进成为preindex(),使其返回子串s2在主串s1中第n个位置之后出现的位置,然后用循环判断即可。实现代码如下:
int preindex(Str *s1,Str *s2,int n)
{
int i=n,j,k;
while(i<s1->length)
{
j=0;
if(s1->ch[i]==s2->ch[j])
{
k=i+1;++j;
while(k<s1->length && j<s2->length && s1->ch[k]==s2->ch[j])
{
++k;++j;
)
if(j==s2->length) //s2终止时找到了子串
break;
else ++i;
}
else ++i;
}
if(i>=s1->length)
return -1;
else
return i+1;
}
int count(Str *s1,Str *s2) //求出现次数
{
int n=0,i=0;
do
{
i=preindex(s1,s2,i);
if(i!=-1)
{
i=i+length(s2);
++n;
}
}while(i!=-1);
return n;
}
【答案解析】