请解释函数fun(char* str,char* find)功能和里面循环语句的作用.

来源:百度知道 编辑:UC知道 时间:2024/05/25 04:40:36
请在每个for后面说明各个循环的作用.小弟感激不尽!!
#include <iostream>
using namespace std;
int fun(char* str,char* find)
{
int size=0;
int strlen;
int findlen;
for(strlen=0;str[strlen]!=0;strlen++);
for(findlen=0;find[findlen]!=0;findlen++);
for(int i=0;i<strlen;i++)
{
int j;
for(j=0;j<findlen&&i+j<strlen;j++)
{
if(str[i+j]!=find[j])
break;
}
if(j==findlen)
{size++;
i+=(j-1);
}
}
return size;
}
int main()
{
char* str = "deeaeartwreatsdfgeawrtw rty";
char* find = "ea";
cout<<fun(str,find)<<endl;
system("pause");
return 0;
}

楼主你好,我是学了C语言得新手,不过我想能给你答案:
整个程序得目的是为了在一个字符串里找另外一个字符串出现的次数。
以下我会指出每个循环得作用:

#include <iostream>
using namespace std;
int fun(char* str,char* find)
{
int size=0;
int strlen;
int findlen;
for(strlen=0;str[strlen]!=0;strlen++); //a.这里明显,测定第一个字符串的长度strlen
for(findlen=0;find[findlen]!=0;findlen++); //b.这里测定第二个字符串得长度findlen
for(int i=0;i<strlen;i++) //c.这个外层循环得作用是在下面d处得循环体里提供数值i来表示str[i+j]
{
int j;
for(j=0;j<findlen&&i+j<strlen;j++) //d.这个循环得作用是以str[i]为起点,检查连续两个字符是否跟“ea”匹配,入伏哦第一个不匹配直接break,若第一个匹配第二个不匹配则第二次break且j==1,若2个都匹配则循环正常结束且j==2
{
if(str[i+j]!=find[j])
break;
}
if(j==findlen) //f.再这里若j==findlen==2,则size+=1,且i指向下一个字符,复合语句里j==2但是用j表示是为了增加程序的可移植性(下次只要改字符串则可检验别的2个字符串)。
{size++;
i+=(j-1);
}
}
return size;
}
int main()
{
char* str = "deeaeartwreatsdfgeawrtw rty";
char* find = "ea"