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

二进制字符串的匹配有关问题

2012-04-11 
二进制字符串的匹配问题题目说明:输入测试次数n,每次输入两个字符串a,b,且字符串都是由0和1组成。字符串a若

二进制字符串的匹配问题
题目说明:
输入测试次数n,每次输入两个字符串a,b,且字符串都是由0和1组成。字符串a若为b的子串,就返回第一次在b中出现的位置,并输出;否则输出0,共重复n次。
输入要求:
2  
11
1001110110
101
11001001001001
输出结果:
3
0

代码如下:
#include <stdio.h>
int Test(char *a,char *b) /*a[]是一个模式*/
{ int i,j,t;
  i=0;
  while(b[i++]!='\0')
  { t=i;
  for(j=0;a[j]!='\0';j++)
  { if(b[t]!=a[j])
  break;
  else t++;
  }
  if(a[j]=='\0')
  {
  return i;
  break;
  }
  }
  if(b[i]=='\0'&&a[j]!='\0')
  return 0;
}
int main()
{
  int n;
  int i=0,j=0;
  char a[10],b[100];
  scanf("%d\n",&n);
  int t[n];
  while(i<n)
  {
  scanf("%s\n%s\n",a,b);
  t[j++]=Test(a,b);
  i++;
  }
  t[j]='\0';
  i=0;
  while(i<n)
  printf("%d \n",t[i++]);
  return 0;
}


问题1:比如输入2,再输入两组字符串,最后总是要ctrl+d,不知道什么原因?
问题2:当字符串a不是字符串b的子串时,输出应该是0,但是输出却是一个很大的数,?
谢谢!

[解决办法]
楼主是什么编译器?int t[n];这个也能编过?
[解决办法]
1. 把scanf的第二个\n去掉就可以
2. while(b[i++]!='\0'),这里当b[i]=='\0'时,退出循环,此时i++,已经跳过了'\0',就不会走到最后的return 0了
[解决办法]
我怎么记得定义数组的时候不能使用变量的。
这种情况最好使用malloc 动态申请比较好。

[解决办法]
建议吧scanf中‘\n’都去掉,这样会影响字符串的输入,还有就是2楼的问题,
导致,最后的if判断失败。无法放回0。
而且一开始t就等于1,
这样判断的结果也会有影响的。最好改为
while(b[i]!='\0')
{ t=i++;
。。。
}
然后在需要返回i值的时候,都要自减一下,不然都会比实际的位置大一个单位

热点排行