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

   # define  ARRAY_NUM (a) ((sizeof (a))/(sizeof ([0])))   typedef  unsigned  char字节;      void  getnext_bin (byte 子[],int 小尺寸,,int 下[])   {//,得到接下来的数据,其实本质是自身公里匹配   printf (“sub  bin  array :,“);   int  i, j。   小姐:=,0;   时间=j  1;   下一个[0],=,1;   TRACE (_T (“% d \ n"),下一个[我]);   while (小姐:+,- 1,& lt;,小尺寸)   {   if  (j ==, 1, | |,子[我],==,子[j])   {   + +我;   + + j;   1 # if    if (子[我],!=,子[j])   {   下一个[我],=,j。   }   其他的   {   下[我],=,下一个[j];   }      其他#   下一个[我],=,j。   # endif   TRACE (_T (,,, % d \ n"),,下一个[我]);   }   其他的   {   时间=j 下[j];   }      }   printf (“\ n");   }         int  kmp_bin (byte 主要[],int  mainSize,, byte 子[],,int 小尺寸,,int 下[])   {//,返回s在m中的第一个数据的下标   int  i, j。   小姐:=,0;   时间=j  0;   int  nIndex =, 1;   while (小姐:& lt;, mainSize)   {   if  (j ==, 1, | |,主要[我],==,子[j])   {   + +我;   + + j;   if  (j ==,小尺寸)   {   nIndex =,(小姐,安康;j);   打破;   }   }   其他的   {   时间=j 下[j];   }   }   return  nIndex;   }

调用方法:

void  CtestDlg: OnBnClickedButton2 ()   {   FILE , *,《外交政策》;   _wfopen_s(和fp, _T (“c: \ \ Install.exe"),, _T (“rb"));      fseek (fp, 0,, SEEK_END);   INT , length =, ftell (fp);      fseek (fp, 0,, SEEK_SET);      byte  * pBuff =, new 字节(长度);   memset (pBuff, 0,长度);   从文件中读(pBuff,长度,,1,,fp);      byte  t [],=, {utf - 8,“; @Install@ ! !, ! @InstallEnd@ !“,};//,二进制序列的公里   int 其次[ARRAY_NUM (t)),=, {, 0};   getnext_bin (t), sizeof (t),下一个);   TRACE (“kmp_bin ,=, % d \ n",, kmp_bin (pBuff,,长度,,t, 33岁,明年));      文件关闭(fp);   delete  [] pBuff;   }


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