加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

KMP二进制算法在文件搜索中的应用

发布时间:2020-12-14 03:22:32 所属栏目:大数据 来源:网络整理
导读:#define?ARRAY_NUM(a) ((sizeof(a))/(sizeof(a[0]))) typedef?unsigned?char byte; void?getnext_bin(byte?sub[],?int?subSize,?int?next[]) { //?得到next数据,其实本质是自身KMP匹配 printf("sub?bin?array?:?"); int?i,?j; i?=?0; j?=?-1; next[0]?=?-1;
#define?ARRAY_NUM(a) ((sizeof(a))/(sizeof(a[0]))) typedef?unsigned?char byte; void?getnext_bin(byte?sub[],?int?subSize,?int?next[]) { //?得到next数据,其实本质是自身KMP匹配 printf("sub?bin?array?:?"); int?i,?j; i?=?0; j?=?-1; next[0]?=?-1; TRACE(_T("%dn"),?next[i]); while?(i?+?1?<?subSize) { if?(j?==?-1?||?sub[i]?==?sub[j]) { ++i; ++j; #if?1 if?(sub[i]?!=?sub[j]) { next[i]?=?j; } else { next[i]?=?next[j]; } #else next[i]?=?j; #endif TRACE(_T(",?%dn"),?next[i]); } else { j?=?next[j]; } } printf("n"); } int?kmp_bin(byte?main[],?int?mainSize,?byte?sub[],?int?next[]) { //?返回s在m中的第一个数据的下标 int?i,?j; i?=?0; j?=?0; int?nIndex?=?-1; while?(i?<?mainSize) { if?(j?==?-1?||?main[i]?==?sub[j]) { ++i; ++j; if?(j?==?subSize) { nIndex?=?(i?-?j); break; } } else { j?=?next[j]; } } return?nIndex; }

调用方法:

void?CtestDlg::OnBnClickedButton2()
{
	FILE??*?fp;
	_wfopen_s(&fp,?_T("c:Install.exe"),?_T("rb"));

	fseek(fp,?0,?SEEK_END);
	INT??length?=?ftell(fp);

	fseek(fp,?SEEK_SET);

	byte?*pBuff?=?new?byte[length];
	memset(pBuff,?length);
	fread(pBuff,?length,?1,?fp);

	byte?t[]?=?{?";[email?protected]@!UTF-8!;[email?protected]@!"?};

	//?二进制序列的KMP
	int?next[ARRAY_NUM(t)]?=?{?0?};
	getnext_bin(t,?sizeof(t),?next);
	TRACE("kmp_bin??=?%dn",?kmp_bin(pBuff,?t,?33,?next));

	fclose(fp);
	delete?[]pBuff;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读