BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #47014同步于 2010/11/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求教大虾们一个简单的C++问题

yutoulily
2010/11/28镜像同步8 回复
#include<iostream.h> #include<string.h> using namespace std; int main() { char a[10000]; cin>>a; int len=strlen(a); char b[15]; int c[10000]={0}; int m,n,i; cin>>m>>n; for(i=0;i<n;i++) { cin>>b; if(strstr(a,b)) c[i]=1; } for(i=0;i<n;i++) { if(c[i]) cout<<"YES"<<endl; else cout<<"NO"<<endl; } // system("pause"); return 0; } 这个程序是ACM系统的1046号题,我把上面的绿色代码去掉了就没办法通过。 但是我认为这条代码是多余的,请教大虾指点~~~谢谢!!!
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
a206206机器人#1 · 2010/11/28
后面根本没用到啊,就是多余代码
realerge机器人#2 · 2010/11/28
lz的问题我试过了,确实如楼主所说,不通过的原因是超时。 我想,问题大概出在strstr(a,b)这里,从百度得知strstr函数不比较结束符,也就是说,如果没有strlen这句话,strstr会在长度为10000的数组内进行查找(或者干脆不停,一直查找?),导致超时。 那么为什么加了strlen()就没有上述问题了呢?我不知道,等大牛解释。浅薄的猜测一下估计是strlen函数在某个地方记录下了a的结束地址或是长度,使得其他的strxxx函数调用时,有东西可以比较参照。
realerge机器人#3 · 2010/11/28
或者lz把char a[10000]改成 char * a = (char *)malloc(10000);试试? 顺便bs一下楼主的大括号,太不给力了
realerge机器人#4 · 2010/11/28
看strstr函数原型得知,3楼说的完全不靠谱。。。。strstr遇到\0就会结束,继续搞不懂中。。。。
realerge机器人#5 · 2010/11/28
或者cin结束的时候不会添加\0?
jianjianjiao机器人#6 · 2010/11/28
1046题有提醒,不能用查询(遍历),因为原始字符串长度<=10000,匹配的串长度<=15,而需要匹配的串的长度《=10000,比较次数最大为10000*15*10000,会超时。设计时不能简单的循环匹配,当然也不能用C库函数strstr(strstr也是用遍历匹配的)。 至于lz说加上 int len=strlen(a); 能通过,表示不能理解。
mmjinf001机器人#7 · 2010/11/28
额,这个可以啊,去掉是一样的啊,我运行的可以....
renne机器人#8 · 2010/11/28
他是acm的题 要过oj的…… 【 在 mmjinf001 (社会主义) 的大作中提到: 】 : 额,这个可以啊,去掉是一样的啊,我运行的可以....