读书人

小弟又遇到有关问题了了

发布时间: 2012-02-21 16:26:23 作者: rapoo

小弟又遇到问题了,请教大家了
程序实现字符串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);
}

读书人网 >C语言

热点推荐