问答题 编写一个算法,计算子串s2在主串s1中出现的次数。
【正确答案】对函数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; }
【答案解析】