这道题怎么做呢,求解

 

int count(char *str, char *substr)
{
	int i, j, k, num = 0;
	for (i = 0; str[i] != '\0'; i++)
		for (j=i, k = 0; substr[k] == str[j]; k++, j++)
			if (substr[k+1] == '\0')
			{
				num++;
				break;
			}
	return num;
}

int main()
{
	char a[100] = { 0 };
	scanf_s("%s", a, 100);
	char b[10] = { 0 };
	scanf_s("%s", b, 10);
	int c = count(a, b);
	printf("子串数量:%d", c);

	return 0;
}

 

int count(char*str,char*substr)
{
int i,j,k,num=0;
for(i=0;str[i];i++) /* str[i]相当于 str[i] != '\0' 一直到串结束 */
for(j=i,k=0;substr[k]==str[j];k++,j++)
/* substr[k]==str[j] ;判断从i开始是否和子串的每个字符都相等
k=0,子串从头开始
由于循环条件是 substr[k]==str[j] ,所以,如果不匹配,会提前退出循环!!
就不会找到结束符
*/
if(substr[k+1]=='\0')
/* 子串的后1个字符,是结束符,全部匹配,找到一个匹配的子串*/
{
num++;/* 子串计数,找到一个匹配的,计数加1 */
break; /* 本轮匹配结束,进行下一轮匹配,所以,要退出内循环,重新开始 */
}
return(num);
}

 

第一个空  str[i] 

第二个空 j=i,

第三个空 k+1

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632