bmsearch.cpp

来自「BM搜索算法源代码。能够快速搜索。写成类」· C++ 代码 · 共 60 行

CPP
60
字号
#include "stdafx.h"
#include "BMSearch.h"


//关键字初始化
//关键字指针 关键字长度 
int CBMSearch::config(unsigned char *key,int keylen)
{
	int i;

	//长度不能大于256
	if( keylen>MAXKEYLEN ) return 1;
	m_KeyLen=keylen;
	memcpy(m_Key,key,m_KeyLen);

	//变量清零
	memset(m_KeyChar,0xff,MAXKEYLEN);
	memset(m_Table,0xff,256);
	
	//初始化偏移量
    for(i=0;i<keylen;i++)
	{
		if( m_Table[ key[i] ]!=0xff ) m_KeyChar[i]=m_Table[ key[i] ];
		m_Table[ key[i] ]=i;
	}
	return 0;
}

//查找
//待查找数据指针 待查找数据长度 返回找到的指针
int CBMSearch::search(unsigned char *data,int datalen,unsigned char *position)
{
	int i;
	unsigned char t,*p;

	for(i=m_KeyLen-1;i<datalen;i+=m_KeyLen)
	{
		t=m_Table[ *(data+i)];

		if( t!=0xff )
		{
			while( t!=0xff )
			{
				p=data+i-t;
				if( !memcmp(p,m_Key,m_KeyLen) ) 
				{
					//匹配
					position=p;
					return 0;
				}

				//不匹配
				t=m_KeyChar[t];
			}
		}
	}

	return 2;

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?