程序改错题

来源:百度知道 编辑:UC知道 时间:2024/06/05 04:29:56
gc342.c的功能是:计算字符串中子串出现的次数
请改正程序中的两个错误,使程序能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include "string.h"
#include "stdio.h"
main()
{ char str1[20],str2[20],*p1,*p2;
int sum=0;
printf("please input two strings\n");
scanf("%s%s",str1,str2);
p1=str1;p2=str2;
while(*p1!='\0')
{
if(*p1==*p2)
{while(*p1==*p2||*p2!='\0')
{p1++;
p2++;}
}
else
p2++;
if(*p2=='\0')
sum++;
p2=str2;
}
printf("%d\n",sum);
getch();
}

第一处:while(*p1==*p2||*p2!='\0') 将其中的“||”改为“&&”,只有他们同为真时才继续循环。
第二处:else p2++; 将p2++改为p1++。
测试结果:qwer(回车)
qwer(回车)
得到的结果是1。
输入QWERQERTYUIO 和QWER得到的结果是2。

此程序在上面结构下只能计算字符串一中包括字符串二多少个,若是在输入字符串后,进行比较,用分支,可判断长字符串包括段字符串多少个,还有若将数组也改为指针,理论上就可以判断任意长度字符串的包含关系了。