Tokenizer.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "stdafx.h"
  2. #include "Tokenizer.h"
  3. CTokenizer::CTokenizer(const CString &cs, const CString &csDelim): m_cs(cs), m_nCurPos(0)
  4. {
  5. SetDelimiters(csDelim);
  6. }
  7. void CTokenizer::SetDelimiters(const CString &csDelim)
  8. {
  9. for(int i = 0; i < csDelim.GetLength(); ++i)
  10. {
  11. m_delim.Add(csDelim[i]);
  12. }
  13. m_delim.SortAscending();
  14. }
  15. bool CTokenizer::Next(CString &cs)
  16. {
  17. cs.Empty();
  18. int len = m_cs.GetLength();
  19. while(m_nCurPos < len && m_delim.Find(m_cs[m_nCurPos]))
  20. {
  21. ++m_nCurPos;
  22. }
  23. if(m_nCurPos >= len)
  24. {
  25. return false;
  26. }
  27. int nStartPos = m_nCurPos;
  28. while(m_nCurPos < len && !m_delim.Find(m_cs[m_nCurPos]))
  29. {
  30. ++m_nCurPos;
  31. }
  32. cs = m_cs.Mid(nStartPos, m_nCurPos - nStartPos);
  33. return true;
  34. }
  35. CString CTokenizer::Tail()
  36. {
  37. int len = m_cs.GetLength();
  38. int nCurPos = m_nCurPos;
  39. while(nCurPos < len && m_delim.Find(m_cs[nCurPos]))
  40. {
  41. ++nCurPos;
  42. }
  43. CString csResult;
  44. if(nCurPos < len)
  45. {
  46. csResult = m_cs.Mid(nCurPos);
  47. }
  48. return csResult;
  49. }