二级C语言 程序设计题

按题目要求编写完整功能代码,参考答案点击按钮展开

81程序设计题:统计子串在主串中出现次数

编写函数 fun,统计字符串 substr 在字符串 str 中出现的次数。例如 str="abababab", substr="ab",返回 4。

#include <stdio.h>
/* 函数功能:统计子串 substr 在主串 str 中出现的次数。
   请在下方编写 fun 函数体。 */
int fun(char str[], char substr[])
{
    /* 请在这里编写代码 */

}

int main()
{
    char str[] = "abababab";
    char substr[] = "ab";
    printf("出现次数: %d\n", fun(str, substr));
    return 0;
}
参考答案
int fun(char str[], char substr[])
{
int i, j, count = 0;
int len1 = 0, len2 = 0;
while(str[len1]) len1++;
while(substr[len2]) len2++;
for(i=0; i<=len1-len2; i++)
{
for(j=0; j<len2; j++)
{
if(str[i+j] != substr[j]) break;
}
if(j == len2) count++;
}
return count;
}
解析

考点:字符串匹配 + 嵌套循环。外层 i 从 0 到 len1-len2(主串剩余长度够子串长度才比),内层 j 逐字符比较 str[i+j] 与 substr[j]。若 j 走完整个子串都没 break,说明匹配成功 count++。注意外层上限是 <=len1-len2(包含等号,因为 i=len1-len2 时主串最后 len2 个字符还能比)。本题统计可重叠匹配(abababab 中 ab 出现 4 次)。