本题考点:
- 字符串处理
- set 容器使用
实现一种简单原始的文件相似度计算,即以两文件的公共词汇占总词汇的比例来定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。
输入格式:
输入首先给出正整数N(≤100),为文件总数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文件结束。在N个文件内容结束之后,给出查询总数M(≤10
4
),随后M行,每行给出一对文件编号,其间以空格分隔。这里假设文件按给出的顺序从1到N编号。
输出格式:
针对每一条查询,在一行中输出两文件的相似度,即两文件的公共词汇量占两文件总词汇量的百分比,精确到小数点后1位。注意这里的一个“单词”只包括仅由英文字母组成的、长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。单词间以任何非英文字母隔开。另外,大小写不同的同一单词被认为是相同的单词,例如“You”和“you”是同一个单词。
输入样例:
3
Aaa Bbb Ccc
#
Bbb Ccc Ddd
#
Aaa2 ccc Eee
is at Ddd@Fff
#
2
1 2
1 3
输出样例:
50.0%
33.3%
本题主要是对字符串的处理,我们需要读取每一行的数据,然后根据是否是英文字母,来进行处理分段,然后使用 set 容器来进行不同数据的存储。
今年疫情在家,有时候因为有事,有很多杂事要处理,所以效率不高,我还有很多目标要去实现,还有很多事情要去做,我的人生会很精彩,加油!
完整代码如下:
#include <iostream>
#include <set>
#include <string>
#include <cctype>
using namespace std;
#define MAXN 105
int N, M; // 文件总数,查询总数
string str; // 读取每一行
set<string> files[MAXN]; // 文件中的单词
void handleStr(string str