| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #pragma once
- #include "ArrayEx.h"
- class CTokenizer
- {
- public:
- CString m_cs;
- CArrayEx < TCHAR > m_delim;
- int m_nCurPos;
- CTokenizer(const CString& cs, const CString& csDelim) : m_cs(cs), m_nCurPos(0)
- {
- SetDelimiters(csDelim);
- }
- void SetDelimiters(const CString& csDelim)
- {
- for (int i = 0; i < csDelim.GetLength(); ++i)
- {
- m_delim.Add(csDelim[i]);
- }
- m_delim.SortAscending();
- }
- bool Next(CString& cs)
- {
- cs.Empty();
- int len = m_cs.GetLength();
- while (m_nCurPos < len && m_delim.Find(m_cs[m_nCurPos]))
- {
- ++m_nCurPos;
- }
- if (m_nCurPos >= len)
- {
- return false;
- }
- int nStartPos = m_nCurPos;
- while (m_nCurPos < len && !m_delim.Find(m_cs[m_nCurPos]))
- {
- ++m_nCurPos;
- }
- cs = m_cs.Mid(nStartPos, m_nCurPos - nStartPos);
- return true;
- }
- CString Tail()
- {
- int len = m_cs.GetLength();
- int nCurPos = m_nCurPos;
- while (nCurPos < len && m_delim.Find(m_cs[nCurPos]))
- {
- ++nCurPos;
- }
- CString csResult;
- if (nCurPos < len)
- {
- csResult = m_cs.Mid(nCurPos);
- }
- return csResult;
- }
- };
|