求助。。用count函数计算子串substr在str中出现的次数,为什么零错误运行出来有问题?

count(char *str,char *substr)
{
int x,y,z;
int num=0;
for(x=0;str[x]!=’\n’;x++)
for(y=x,z=0;substr[z]==str[y];z++,y++)
if(substr[z]==NULL)
{num++; break; };
}

1.字符结束符是\0,不是\n,\n是回车符
2.如果substr在str的中间部分,for循环中使用substr[z]==str[y]作为条件的时候,当substr到了末尾的时候,是不会进入for循环的。

代码修改如下:


int count(char *str,char *substr)
{
    int x,y,z;
    int num=0;
    for(x=0;str[x] != '\0';x++)
    {
        for(y=x,z=0; substr[z] != '\0'&& substr[z]==str[y];y++,z++); //注意这里的分号
        if(substr[z] == '\0')
            num++;
    }
    return num;
}

str[x]!=’\0’
'\n'是换行符,'\0'才是字符串结束符
另外,内层循环应该判断str[y]不是字符串结束符,否则就进行越界判断了

count(char *str,char *substr)
{
int x,y,z;
int num=0;
for(x=0;str[x]!=’\0’; x++)
for(y=x,z=0;str[y] != '\0' && substr[z]==str[y];z++,y++)
if(substr[z]=='\0')
{num++; break; };
}


count(char *str,char *substr)
{
    int x,y,z;
    int num=0;
    for(x=0;str[x]!='\0';x++)
        for(y=x,z=0;substr[z]==str[y];z++,y++)
            if(substr[z]=='\0')
            {
                num++; break; 
            };
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632