#include "stdafx.h" #include "Tokenizer.h" CTokenizer::CTokenizer(const CString &cs, const CString &csDelim): m_cs(cs), m_nCurPos(0) { SetDelimiters(csDelim); } void CTokenizer::SetDelimiters(const CString &csDelim) { for(int i = 0; i < csDelim.GetLength(); ++i) { m_delim.Add(csDelim[i]); } m_delim.SortAscending(); } bool CTokenizer::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 CTokenizer::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; }