问答题 函数fun()的功能是:从s所指字符串中,找出与t所指字符串相同的子串的个数作为函数值返回。例如,当s所指字符串中的内容为”abcdabfab”,t所指字符串的内容为”ab”,则函数返回整数3。
请改正程序中的错误,使它能得出正确的结果。
#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)
/**********found**********/
r++;p++

else break;
/**********found**********/
if(r=='/0')
n++;
s++;

return n;

main()

char s[100],t[100];int m;
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);


【正确答案】(1)r++;p++; (2)if(*r=='/0')
【答案解析】[解析] ①该题中函数的功能是查找字符串中某子串的个数。其中,s指向主串,r指向子串。外循环中移动指针s,依次指向字符串中的每个字符。内循环中,判断r所指字符串与p所指字符开始的串是否完全匹配;若不能匹配,由break退出循环;若r指向串结束标志,退出循环,则表示匹配。
②从己给定源程序的main()主函数开始入手,从键盘获得输入的字符串s,t,然后通过“m=fun(s,c);”语句调用fun()函数。
①C语言中,语句应该以“;”结束。在第二个标识处,“p++”语句没有以“;”结束,因此第一个标识处应该是“r++;p++;”。
②根据审题分析,要判断指针r是否指向串尾来结束内循环,而判断语句应该是“if(*r='/0')”。
[考点] 指针操作。