小弟又遇到问题了,请教大家了
程序实现字符串a在字符串b中出现的次数,并且将出现的位置记下来显示出,程序如下
#include<stdio.h>
int main()
{
int i,j,k,n=0,sum=0;
char a[]="ab",b[]="abcdab";
int p[6];
for(j=0;b[j]!='\0';j++)
{
for(k=j,i=0;a[i]==b[k];i++,k++)
{
if(a[i]=='\0')
{
sum++;
p[n]=j+1;
n++;
break;
}
}
}
for(n=0;n<=sum-1;n++)
printf("%d ",p[n]);
printf("total: %d\n",sum);
return(0);
}
但是明显看出应该出现2次,而程序显示只出现1次,而且位置是5,位置是1的那次没有显示,不知道为什么,请教各位了!谢谢!
[解决办法]
- C/C++ code
#include <stdio.h> int main() { int i,j,k,n=0,sum=0; char a[]="ab",b[]="abcdab"; int p[6]; for(j=0;b[j]!='\0';j++) { for(k=j,i=0;a[i]=='\0'||a[i]==b[k];i++,k++) { if(a[i]=='\0') { sum++; p[n]=j+1; n++; break; } } } for(n=0;n <=sum-1;n++) printf("%d ",p[n]); printf("total: %d\n",sum); return(0); } 1 5 total: 2Press any key to continue
[解决办法]
- C/C++ code
#include <stdio.h> int main() { int i,j,k,n=0,sum=0; char a[]="ab",b[]="abcdab"; int p[6]; for(j=0;b[j]!='\0';j++) { for(k=j,i=0;a[i]!='\0';i++,k++) { if(a[i]!=b[k]) { break; } } if (a[i]=='\0') { sum++; p[n]=j+1; n++; } } for(n=0;n <=sum-1;n++) printf("%d ",p[n]); printf("total: %d\n",sum); return(0); }
[解决办法]
- C/C++ code
//你这程序是巧了,你char b[] = {"absdabs"};试试,你一次都不会输出#include <stdio.h> int main() { int i,j,k,n=0,sum=0; char a[]="ab",b[]="abcdab"; int p[6]; for(j=0;b[j]!='\0';j++) { for(k=j,i=0;a[i]==b[k];i++,k++) //你光比较,也不判断a到没到'\0',到了之后,如果b没到'\0',直接就是假,下面的都不执行了 { if(a[i]=='\0') { sum++; p[n]=j+1; n++; break; } } } for(n=0;n <=sum-1;n++) printf("%d ",p[n]); printf("total: %d\n",sum); return(0); }
[解决办法]
不+也可以,你的问题出在
for(k=j,i=0;a[i]==b[k];i++,k++)
{
if(a[i]=='\0') 。。。。 这里
因为你的循环进行条件:for(k=j,i=0;a[i]==b[k];i++,k++) 有问题。
你的程序第一次进入内循环以后,此时j=0,即:k=j=0, 满足a[i]==b[k],所以 i++,k++;
但是,当你的i和k同时递增到2的时候,a[2]是'\0',b[2]是'c',不满足循环继续条件了,
而此时还是不满足if判断条件的,即并没有记录下第一次出现的位置。
我把程序改成下面的了:
#include <stdio.h>
#include <string.h>
int main(void)
{
int i,j,k,q,n=0,sum=0;
char a[]="ab",b[]="abcdab";
int p[6];
q=strlen(a);
for(j=0;b[j]!='\0';j++)
{
for(k=j,i=0; i<q; i++,k++) //进行 strlen(a)次 a[i]==b[k]的判断
{
if(a[i]==b[k] && i==q-1) //如果 最终i递增到q-1时还满足a[i]==b[k],即:a在b中出现
{
sum++;
p[n]=j+1;
n++;
break;
}
}
}
for(n=0;n <=sum-1;n++)
printf("%d ",p[n]);
printf("total: %d\n",sum);
return(0);
}