#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