文件名查找
Time Limit:1000MS Memory Limit:32768K
Description:
在目录里用搜索查找文件是很方便的但是这究竟是怎样一个过程呢?
Input:
第一行为2个整数n,m(0<n,m<=10) 接着有n行字串每行包含数据Ni,表示文件名(无空格) 后面是m行查询每行包含数据Si,表示要查询的文件名前缀Output:
对于每个查询,输出以Si为前缀的文件总数Sample Input:
6 5
SearchIndexer.exe
npmproxy.dll
schtasks.exe
KBDSORST.DLL
DRWATSON.EXE
wdi.dll
WavD
KB
Com
DRWAT
odbc
Sample Output:
0
1
0
1
0
#include <iostream>
using namespace std;
char c1[500][500];
char c2[500];
int n,m;
int find(char c2[])
{
int i,j,c=0;
for(i=0;i<n;i++)
{
for(j=0;j<strlen(c2);j++)
{
if(c2[j]!=c1[i][j]) break;
}
if(j==strlen(c2))
{
c++;
break;
}
}
return c;
}
int main()
{
int i;
cin>>n>>m;
for(i=0;i<n;i++)
cin>>c1[i];
for(i=0;i<m;i++)
{
cin>>c2;
cout<<find(c2)<<endl;
}
system("pause");
return 0;
}
记:一开始将i,j全定义为全局变量了,发现只得到一组输出结果,调试发现,调用find()函数返回时,i已经等于6了,所以直接退出最下面的for循环,第二组测试数据就输不进去了,将全局变量改成局部的即可!
考试时一直想用查找子串的方法,一开始不知道s.substr()这个函数,后面时间快到的时候测试时也有类似问题,输出莫名其妙,以后要注意,
#include <iostream>
using namespace std;
char c1[500][500];
char c2[500];
int n,m;
bool find(char c2[])
{
int i,j,flag=false;
for(i=0;i<n;i++)
{
for(j=0;j<strlen(c2);j++)
{
if(c2[j]!=c1[i][j]) break;
}
if(j==strlen(c2))
{
flag=true;
break;
//当找到,即可退出,可加快速度 ,但这样只能查找到一个,如果要统计出现的次数,用上面的那种
}
}
return flag;
}
int main()
{
int i;
cin>>n>>m;
for(i=0;i<n;i++)
cin>>c1[i];
for(i=0;i<m;i++)
{
cin>>c2;
bool tmp=find(c2);
if(tmp)
cout<<1<<endl;
else
cout<<0<<endl;
}
system("pause");
return 0;
}
/////////////////////////////////////////////////////朋友做的
#include<iostream>
using namespace std;
char a[100][60];
int main()
{
char b[50];
int m,n;
cin>>m>>n;
getchar();
for(int i=0;i<m;i++)
gets(a[i]);
// cout<<"完了"<<endl;
for(int i=0;i<n;i++)
{
gets(b);
int k=0;
for(k=0;k<m;k++)
{
int j=0;
for(j=0;b[j];j++)
if(b[j]!=a[k][j]) break;
if(!b[j])//读到了b[j]的最后一个\0
{cout<<'1'<<endl;break;}
}
if(k==m) cout<<'0'<<endl;
}
system("pause");
}