编写函数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;