首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟又遇到有关问题了,了

2012-02-21 
小弟又遇到问题了,请教大家了程序实现字符串a在字符串b中出现的次数,并且将出现的位置记下来显示出,程序如

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

热点排行