Description:
なに?!新买的 U盘这么快就中病毒了!
目录下多出很多同名的可执行文件:比如 1.gif 与 1.gif.exe 对应,main.c 于 main.c.exe 对应。它们都是病毒。但并不是所有可执行文件(扩展名为 .exe 的文件)都是病毒,比如图中的 problem.exe,并没不存在一个文件名字叫 problem,所以它不是病毒。
我会给你一些文件名列表,你能开发一款“病毒扫描器”帮我识别出哪些是病毒文件吗?识别方法是:
文件名以“.exe”结尾。
在文件名列表中同时还存在去掉“.exe”后同名的文件。
Input:
输入数据有多组。
每组输入的第一行是一个整数 n(0 < n <= 1000),表示接下来会有 n 个文件名。
接下来的 n 行为文件名,每个文件名占一行。
文件名最多 16 个字符,并且中间不包含空格。
如果 n 等于 0,则程序结束。
Output:
以字典顺序输出每一组数据中的病毒文件名。
每个文件名输出一行。
Sample Input:
2
a.txt
a.txt.exe
2
a
a.txt
10
a.txt
b.txt
d.txt.exe
c.txt
d.txt
a.txt.exe
e.txt
f.txt
e.txt.exe
g.txt
0
Sample Output:
a.txt.exe
a.txt.exe
d.txt.exe
e.txt.exe
#include <iostream>
#include "string"
#include "set"
#include "vector"
using namespace std;
/**
* kkmd66
* @return
*/
int main() {
int n;
while (cin >> n && n != 0) {
//存储
vector<string> vector;
for (int i = 0; i < n; ++i) {
string temp;
cin >> temp;
vector.push_back(temp);
}
//遍历并存储
multiset<string> set;
for (int i = 0; i < vector.size(); ++i) {
if (vector[i][vector[i].size() - 1] == 'e' && vector[i][vector[i].size() - 2] == 'x' &&
vector[i][vector[i].size() - 3] == 'e' && vector[i][vector[i].size() - 4] == '.') {
string temp = vector[i].substr(0, vector[i].size() - 4);
for (int j = 0; j < vector.size(); ++j) {
if (temp == vector[j]) {
string result = temp + ".exe";
set.insert(result);
}
}
}
}
//输出
for (auto it: set) {
cout << it << endl;
}
}
return 0;
}