最近心血来潮,毕竟在家闲得无聊,敲了一个检索的程序,不过写代码时挺快,debug倒是很费劲
程序实现的原理
对于一个检索程序,我们要知道用户所搜索的是什么东西,当然,这个的前提是你的内容中有相关的。
其实检索程序要注意的是用户输入数据与数据本身的联系。也就是说,在达到一个什么样的标准时,我们可以说这个内容是与用户搜索相关的,但这个是无法确定的,所以不妨把要求定低点,当然了,我是说的其他的内容。
在这里我要实现的是一个题目的搜索,所以要求低了就会出现查找有误的情况,那么就开始我的讲解
查找相似度
对于相似度的查找,我使用了的字符逐一判断,对于这种查找,代码难度较低,只需要在外部定义一个变量就行,用于记录相等的字符数量。
这个的原理类似与一个名为“文章相关性 基因相关性 比较相似性”的题目,刚刚说的这个是一个题目。其原理类似,都是使用比对后的数据和总数据量对比。
那就不妨去写一下这个程序
#include<iostream>
using namespace std;
struct node{
string s;
int cnnt;
}stu[100];
/*上述结构体用于存储数据,便于与输入的进行一个比对*/
void work(){//随便命名的,可以根据自己的喜好
string tmp;
cin>>tmp;
for(int i=0;i<100;i++){
if(tmp==stu[i].s){
/* 已经检索到了*/
//在这里,执行你想要的代码
}else{
for (int j = 0; j < stu[i].s.size(); j++) {
for (int k = 0; k < tmp.size(); k += 2) {
if ((stu[i].s[j] == a[k]) && (tmp[i].s[j + 1] == a[k + 1])) {
stu[i].cnnt++;
//计数,符合当前执行条件
}
}
}
}
/*以上写的代码是关于汉字的,若是英文字符,算法类似,但是不用两个相比较了*/
}
bool flag=false;
//这里判断是否符合标准
for (int i = 0; i < 114; i++) {
if (stu[i].cnnt >= a.size() / 2 && stu[i].cnnt != 0) {
flag = true;//当前是符合标准的
}
if (flag) {
cout << "已为您找到一下题目信息\n";
//判断flag,有无题目信息,给一个
int temp = 1;
int t = 0;
for (int i = 0; i < 114; i++) {
if (stu[i].cnnt >= a.size() / 2 && stu[i].cnnt != 0) {
//输出当前查找到的资源
cout << temp << ".";
temp++;
cout << stu[i].s << endl;
}
}
} else {
cout << "当前数据暂未库,如有数据资源,请联系我们\n";/*找不到了!!!*/
}
}
上述代码所需要比对的数据没有进行读入,因为数据量太大了
那么以上就是检索的全部代码了,其实就是一个暴力的写法,不过代码更注重的是可读性,也就是让大家都能看得懂,方便日后的检查。
希望大家能够关注我,谢谢~