C语言 求注释这是什么意思啊?

编写函数int fun(char *s1,char *s2),在字符串s1中统计字符串s2出现的次数并返回。若s2在s1中未出现,则返回0。例如:
若输入的字符串s1为:abaaAabcaabbabca,字符串s2为:ab ,则程序输出:n=4
若输入的字符串s1为:abaaAabcaabbabca,字符串s2为:abd,则程序输出:No find

答案: int fun(char *s1, char *s2)
{
int i, j, len1 = strlen (s1), len2 = strlen (s2), n=0;

for (i=0; i<=len1-len2; i++)
{
    for (j=0; j<len2; j++)
    {
        if (*(s1+i+j) != *(s2+j))
            break;
    }
    if (j == len2)
    {
        i += j-1;
        n++;
    }
}

return n;

}
求每行的注释!!!!!!!!!!1

如果需要实现此功能,你需要知道什么?
参数是否合理?当str2大于str1时就明显不合理,这在最外层循环中体现
每次在str1中匹配时,默认是在位置0开始的,这个位置由i体现
如何判断是否找到?由if(j==len2)体现
如何增加找到的次数?n++体现
当找到后(没找到则移动一个位置),位置应该被移动str2的长度的距离,例如在12312中找12,第一次找到了,那么第二次应该在2312中找12吗?显然不需要,应该在312中找。由i += j-1体现,不过在这里我觉得使用 i += len2-1更合适。

...................我竟无言以对!

        for (i=0; i<=len1-len2; i++)//len1-len2次
        {
                for (j=0; j<len2; j++)    //循环len2次
                {
                        if (*(s1+i+j) != *(s2+j))如果s1+i+J指向的值不等于s2+j的值就跳出第二个for循环,可能是,没去试过。
                                break;
                }
                if (j == len2)//当第二个for循环全部循环完了的话长度是len2。。。。n加1,
                {
                        i += j-1;//i=i+j-1//在这段代码没用!
                        n++;
                }
        }

        return n;