www.pudn.com > CIVStringSet.zip > StringSet.H
// StringSet.H: interface for the CIVStringSet class. // // Written 12 June 2002 by Scot T Brennecke // Thanks to Moishe Halibard and Moshe Rubin for their article, // "A Multiple Substring Search Algorithm" in the June 2002 // edition of C/C++ Users Journal. This class is based on // the algorthim therein described, but extended to return // all strings and use MFC classes. #pragma once #pragma warning(disable: 4100 4786) #includeclass CIVStringSet : public CStringArray { public: CIVStringSet( WORD wInitialWidth = 64 ) ; // Initial width of FSM virtual ~CIVStringSet() ; bool Add( LPCTSTR pszWord ) ; // a single word bool Add( const CString & rstrWord ) ; // a single word int Add( LPCTSTR pszWords, LPCTSTR pszDelims ) ; // multiple words, delimited with chars from pszDelims int Add( LPCTSTR pszzWords, int nWords ) ; // nWords words, each 0 term'd, with extra 0 at end int Add( CStringArray astrWords ) ; // all the elements of a CStringArray int Add( CStringList lstrWords ) ; // all the elements of a CStringList UINT FindFirstIn( CString strText, int & rnFirst ) ; // Begin iteration UINT FindNext( int & rnNext ) ; // Continue interation typedef std::pair
CWordPosPair ; // first is index of word in array, second is position in text typedef std::list< std::pair > CWordPosPairList ; // list of pairs to be returned by FindAllIn size_t FindAllIn( CString strText, CWordPosPairList & rlstrWords ) ; // Iterate all at once and make list protected: DWORD (* m_apnFSM)[128] ; // Finite State Machine. Array of 128 char arrays size_t m_nCurDim ; // Dimension of allocated width of FSM size_t m_nUsedCols ; // Used portion of allocated width WORD m_wMaxUsedState ; // largest state value used CString m_strSearch ; // Current search string UINT m_nCurTextChar ; // Current position in search string bool InsertWord( LPCTSTR pszWord, WORD wIndex ) ; // put the new word into the FSM for given index bool SetColDim( size_t nNewDim ) ; // set the current width to at least nNewDim columns private: // Hide several base class members that shouldn't be used // Using these members could cause the index numbers of strings to change, throwing // off the embedded index entries in the FSM void SetAt( int nIndex, LPCTSTR newElement ) ; void SetAt( int nIndex, const CString & newElement ) ; void SetAtGrow( int nIndex, LPCTSTR newElement ) ; void SetAtGrow( int nIndex, const CString & newElement ) ; int Append( const CStringArray & src ) ; void Copy( const CStringArray & src ) ; void InsertAt( int nIndex, LPCTSTR newElement, int nCount = 1 ) ; void InsertAt( int nIndex, const CString & newElement, int nCount = 1 ) ; void RemoveAt( int nIndex, int nCount = 1 ) ; void InsertAt( int nStartIndex, CStringArray * pNewArray ) ; } ;