题目
实现一种简单原始的文件相似度计算, 即以两文件的公共词汇占总词汇的比例来定义相似
度。为简化问题, 这里不考虑中文(因为分词太难了), 只考虑长度不小于1000个英文单
词的文章, 长度超过10字母的单词只考虑前10个字母。
输入格式:
给出要检查的元素英文文本文件的文件夹位置
输出格式:
1, 以表格形式给出该文件夹下两两文件的相似度数值
2, 可以查询两文件的公共词汇(按装英文顺序输出)
说明:
两文件的相似度定义为两文件的公共词汇量占两文件总词汇量的百分比
如
文件1:Aaa Bbb Ccc
文件2:Bbb Ccc Ddd
则相似度为50%, 公共词汇为Bbb Ccc
解题思路
(一)文件夹的打开与读取
- findfirst函数(文件夹)
- 按路径打开文件夹,生成包含文件路径的文本
#include <stdio.h>
#include<string>
#include<fcntl.h>
//negative positive
char wenjiajia[30];
const char *to_search=wenjiajia; //欲查找的文件,支持通配符
FILE *fp;
int main(int argc,char *argv[])
{
char weizhi[50];
int weizhilen=0;
int kz=0;
printf("请输入你要检查的英文文本文件的文件夹位置:例如(E:\\位置\\*.txt)\n");
gets(wenjiajia);
weizhilen=strlen(wenjiajia);
for(kz;kz<weizhilen;kz++){
if(wenjiajia[kz]!='*'){
weizhi[kz]=wenjiajia[kz];
}
else if(wenjiajia[kz]=='*'){
break;
}
}
long handle; //用于查找的句柄
struct _finddata_t fileinfo; //文件信息的结构体
fp = fopen("mulu1.txt", "w+");
if (fp==0)
{
printf("can't open file\n");
return 0;
}
handle=_findfirst(to_search,&fileinfo); //第一次查找
if(-1==handle)
return -1;
fprintf(fp,weizhi,fileinfo.name);
fprintf(fp,"%s!",fileinfo.name); //打印出找到的文件的文件名
while(!_findnext(handle,&fileinfo)) //循环查找其他符合的文件,直到找不到其他的为止
{
fprintf(fp,weizhi,fileinfo.name);
fprintf(fp,"%s!",fileinfo.name);
}
_findclose(handle); //关闭句柄
printf("目录生成");
fclose(fp);
return 0;
}
输入:文件夹路径
输出:目录生成
注意:生成的文本位置与代码位置相同,以!区别不同文件的路径
-
fopen函数(文件)
-
按路径打开文件
//编译预处理指令
#include<stdio.h>
//定义主函数
int main()
//主函数体开始
{
定义字符串
char file1name[10];
char str1[1000];
//gets从标准流
gets(file1name);
//定义文件类型指针变量(FILE *指针变量名)
//fp是指向FILE结构的指针变量,通过fp可找存放某个文件信息的结构变量,然后按结构变量的提供的信息找到该文件,实施对文件的操作。fp为指向一个文件的指针
FILE*fp;
//文件打开fopen函数,以"r"打开只读
fp=fopen(file1name,"r");
//判断是否成功
if(NULL == fp)
{
printf("文件打开失败");
}
//获取文件
while(fgets(str1,1000,fp))
{
printf("%s",str1);
}
//文件关闭flcose函数
fclose(fp)