├── main.cpp ├── 字符数组运算器.cpp ├── 数组运算器.cpp ├── SearchKey.h ├── README.md ├── hash.h └── SearchKey.cpp /main.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HengRuiZ/Hash-Search/HEAD/main.cpp -------------------------------------------------------------------------------- /字符数组运算器.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HengRuiZ/Hash-Search/HEAD/字符数组运算器.cpp -------------------------------------------------------------------------------- /数组运算器.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HengRuiZ/Hash-Search/HEAD/数组运算器.cpp -------------------------------------------------------------------------------- /SearchKey.h: -------------------------------------------------------------------------------- 1 | int search(int l,char* s1,char* s2); 2 | int search_f(FILE*fp,char*key); 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 利用哈希表统计两源程序的相似性 2 | 3 | 1)内容: 4 | 对于两个 C 语言的源程序清单,用哈希表的方法分别统计两程序中使用C语言关键字的情况,并最终按定量的计算结果,得出两份源程序的相似性。 5 | 6 | 2)要求与提示: 7 | C 语言关键字的哈希表可以自建,也可以采用下面的哈希函数昨晚参考: 8 | 9 | Hash(key)=(key第一个字符序号\*100+key 最后一个字符序号)%41 10 | 11 | 表长m取43。此题的工作主要是扫描给定的源程序,累计在每个源程序中C语言关键字出现的频度。为保证查找效率,建议自建哈希表的平均查找长度不大于2。 扫描两个源程序所统计的所有关键字不同频度, 可以得到两个向量。 12 | -------------------------------------------------------------------------------- /hash.h: -------------------------------------------------------------------------------- 1 | #define KEY_NUM 32 2 | #define HASH_LENGTH 43 3 | typedef struct{ 4 | char key[10]; 5 | int frqc1; 6 | int frqc2; 7 | }KeyInfo; 8 | int h(char x[9]); 9 | void FormHash(KeyInfo*a,char key[KEY_NUM][9]); 10 | int Hash(char key[9],KeyInfo *a,int &i); 11 | void SearchKey_F(KeyInfo *a,FILE*fp,int*frqc); 12 | float Cos(int *x1,int *x2); 13 | float L(int *x1,int *x2); 14 | 15 | -------------------------------------------------------------------------------- /SearchKey.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | int search(char* s1,char* s2) 4 | { 5 | if(strlen(s1)