Boyermor.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:3k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. //=============================================================================
  2. // File:       boyermor.h
  3. // Contents:   Declarations for BoyerMoore
  4. // Maintainer: Doug Sauder <dwsauder@hunnysoft.com>
  5. // WWW:        http://www.hunnysoft.com/mimepp/
  6. //
  7. // Copyright (c) 1996-1998 Douglas W. Sauder
  8. // All rights reserved.
  9. // 
  10. // IN NO EVENT SHALL DOUGLAS W. SAUDER BE LIABLE TO ANY PARTY FOR DIRECT,
  11. // INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
  12. // THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF DOUGLAS W. SAUDER
  13. // HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  14. //
  15. // DOUGLAS W. SAUDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT
  16. // NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  17. // PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
  18. // BASIS, AND DOUGLAS W. SAUDER HAS NO OBLIGATION TO PROVIDE MAINTENANCE,
  19. // SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  20. //
  21. //=============================================================================
  22. #ifndef __STKLIB_BOYERMOR_H__
  23. #define __STKLIB_BOYERMOR_H__
  24. //=============================================================================
  25. //+ Name BoyerMoore -- Class for executing Boyer-Moore string search algorithm
  26. //+ Description
  27. //. <var>BoyerMoore</var> implements the Boyer-Moore algorithm for searching
  28. //. for a string.  The Boyer-Moore algorithm is fast, but requires a bit
  29. //. of start-up overhead compared to a brute force algorithm.
  30. //=============================================================================
  31. // Last modified 1998-04-28
  32. //+ Noentry ~BoyerMoore
  33. /***
  34. 快速查找算法类定义,用法如下:
  35. CString strToFind = "要查找的字符串";
  36. CString strSrc = "源字符串";
  37. BoyerMoore moore( strToFind );
  38. LONG value = moore.GetNumberAfter( strSrc, strSrc.GetLength(), 0 );
  39. LONG date  = moore.GetDateAfter( strSrc, strSrc.GetLength(), 0 );
  40. */
  41. class STKLIB_API BoyerMoore {
  42. public:
  43.     
  44.     BoyerMoore(const char* aCstr);
  45.     //. Constructs a <var>BoyerMoore</var> object for searching for
  46.     //. a particular string.
  47.     virtual ~BoyerMoore();
  48.     void Assign(const char* aCstr);
  49.     //. Sets the string to search for.
  50.     size_t FindIn(const char *string, size_t length, size_t startpos);
  51.     //. Searches for the search string in <var>string</var> starting at position
  52.     //. <var>startpos</var>.  If found, the function returns the first position in
  53.     //. <var>string</var> where the search string was found.  If not found, the
  54.     //. function returns <var>CSPString::npos</var>.
  55. double GetNumberAfter( const char *string, size_t length, size_t startpos );
  56. DWORD GetDateAfter( const char *string, size_t length, size_t startpos );
  57. int GetPhraseAfter( const char *string, size_t length, size_t startpos, char * rstring, size_t rmaxlen );
  58. private:
  59. int GetNumStringAfter( const char *string, size_t length, size_t startpos,
  60.   char * rstring, size_t rmaxlen );
  61.     size_t mPatLen;
  62.     char* mPat;
  63.     unsigned char mSkipAmt[256];
  64.     void _Assign(const char* aPat, size_t aPatLen);
  65. };
  66. #endif