读书人

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

发布时间: 2012-04-11 17:42:33 作者: rapoo

二进制字符串的匹配问题
题目说明:
输入测试次数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值的时候,都要自减一下,不然都会比实际的位置大一个单位

读书人网 >C语言

热点推荐