bLue的文件查找器
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description
bLue 的电脑里存了各种各样的文件,随着文件越来越多,查找文件也成了一个麻烦事。
现在,他想要查找所有指定格式(扩展名)的文件,不过他并不会使用文件管理器自带的搜索功能,所以他想求你写一个文件查找器,来帮他查找所有指定格式的文件。
Input
输入数据有多组(数据组数不超过 100),到 EOF 结束。
对于每组数据:
第一行输入一个整数 n (1 <= n <= 100) 和一个长度不超过 5 的字符串 ex,分别表示文件夹内的文件数量和要查找的文件的扩展名。
接下来的 n 行,每行输入一个完整文件名。保证文件名不包含空格且长度不超过 100。
Output
对于每组数据,按照输入顺序输出文件夹内所有扩展名符合查找要求的文件名。
Sample Input
6 cpp
3717.cpp
xunhuansai_daima.zip
xunhuansai_jietibaogao.pdf
C.cpp
bLue.jpg
cyk_de_richang.mp4
Sample Output
3717.cpp
C.cpp
题解过程:
一开始我用的KMP做的一直是CE,因为我用的是C++,不能用定义next[], 最大前缀数组要定义为Next[];
除此之外这个题是让看文件类型,是看" . "后的字符序列是不是和给出的一致;这里用KMP反而麻烦了。
其实这道题我们用简单的for循环就可以做出来。
代码如下:
#include<bits/stdc++.h>
using namespace std;
queue<string>p;
int main()
{
int i, n, len, z, k;
char a[105], b[10];
while(~scanf("%d", &n))
{
getchar();
gets(b);
int len1=strlen(b);
for(z=0; z<n; z++)
{
int f=0;
gets(a);
len=strlen(a);
for(i=0; i<len; i++)
{
if(a[i]=='.')
{
for(i=i+1, k=0; i<len; i++)
{
if(a[i]!=b[k])
{
f=1;
break;
}
k++;
}
}
if(f==0&&i==len&&k==len1) //要确保“.”后面的类型和所需要的一致,不能只是占了其中的一部分;
p.push(a);//如果符合的话,就把这个字符串压进队列;
}
}
while(!p.empty())
{
cout<<p.front()<<endl;
p.pop();
}
}
return 0;
}
/**************************************************
Result: Accepted
Take time: 0ms
Take Memory: 200KB
Submit time: 2019-08-01 15:33:44
****************************************************/