3717 bLue的文件查找器

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
****************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值