求解,这个程序哪里出错了

#include <conio.h>

#include <stdio.h>

#include <string.h>

int fun(char *s, char *t)

{

int n; char *p, *r; n = 0;

while(*s)

{

p = s;

r = t;

while(*r)if(*r == *p)

{

r++; p++;

}

elsebreak;

if(r == '\0')n++;s++;

}

return n;

}

main( )

{

char s[100], t[100];

int m; clrscr( );

printf("\nPlease enter string S:" );

scanf("%s", s);

printf("\nPlease enter substring t:");

scanf("%s", t);

m = fun(s, t);

printf("\nThe result is : m = %d\n", m);

}

这是从主串里找有多少个子串的代码吧?感觉还是可以优化一下

#include <conio.h>
#include <stdio.h>
#include <string.h>
int fun(char *s, char *t)
{
	int n = 0; 
	char *p, *r; 
	while(*s)
	{
		p = s;
		r = t;
        while((*r == '\0') || *(p++) != *(r++))
            break;
		if(*r == '\0')
			n++;
		s++;
	}
	return n;
}
void main()
{
	char s[100], t[100];
	int m; 
	//clrscr();
	printf("\nPlease enter string S:" );
	scanf("%s", s);
	printf("\nPlease enter substring t:");
	scanf("%s", t);
	m = fun(s, t);
	printf("\nThe result is : m = %d\n", m);
}

 

fun函数中,if(r == '\0')n++;s++;这里应该是if(*r == '\0')n++;s++; 漏了一个*号。代码修改如下:

#include <conio.h>
#include <stdio.h>
#include <string.h>
int fun(char *s, char *t)
{
	int n; 
	char *p, *r; 
	n = 0;
	while(*s)
	{
		p = s;
		r = t;
		while(*r)
			if(*r == *p)
			{
				r++; 
				p++;
			}
			else
				break;

		if(*r == '\0')//修改1
			n++;
		s++;

	}
	return n;
}

void main()
{
	char s[100], t[100];
	int m; 
	//clrscr();

	printf("\nPlease enter string S:" );
	scanf("%s", s);
	printf("\nPlease enter substring t:");
	scanf("%s", t);
	m = fun(s, t);
	printf("\nThe result is : m = %d\n", m);
}

 

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

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

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