返回信息流#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号题,我把上面的绿色代码去掉了就没办法通过。
但是我认为这条代码是多余的,请教大虾指点~~~谢谢!!!
这是一条镜像帖。来源:北邮人论坛 / cpp / #47014同步于 2010/11/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求教大虾们一个简单的C++问题
yutoulily
2010/11/28镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
lz的问题我试过了,确实如楼主所说,不通过的原因是超时。
我想,问题大概出在strstr(a,b)这里,从百度得知strstr函数不比较结束符,也就是说,如果没有strlen这句话,strstr会在长度为10000的数组内进行查找(或者干脆不停,一直查找?),导致超时。
那么为什么加了strlen()就没有上述问题了呢?我不知道,等大牛解释。浅薄的猜测一下估计是strlen函数在某个地方记录下了a的结束地址或是长度,使得其他的strxxx函数调用时,有东西可以比较参照。
或者lz把char a[10000]改成 char * a = (char *)malloc(10000);试试?
顺便bs一下楼主的大括号,太不给力了
1046题有提醒,不能用查询(遍历),因为原始字符串长度<=10000,匹配的串长度<=15,而需要匹配的串的长度《=10000,比较次数最大为10000*15*10000,会超时。设计时不能简单的循环匹配,当然也不能用C库函数strstr(strstr也是用遍历匹配的)。
至于lz说加上 int len=strlen(a); 能通过,表示不能理解。