65.9K
CodeProject 正在变化。 阅读更多。
Home

CTokenizer 类

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.82/5 (10投票s)

1999年12月4日

CPOL
viewsIcon

165698

downloadIcon

1426

一个可用于 CString 的简单分词类

引言

有时您需要在 MFC 项目中使用 strtok,但它有两个主要限制:

  • 无法同时用于分割多个字符串。
  • 不方便与 CStrings 安全地使用。

为了克服这些限制,我编写了 CTokenizer

用法

它非常易于使用,如下面的代码所示:

CTokenizer tok(_T("A-B+C*D-E"), _T("-+"));
CString cs;

while(tok.Next(cs))
    TRACE2("Token: '%s', Tail: '%s'\n", (LPCTSTR)cs, (LPCTSTR)tok.Tail());

前面的代码产生以下输出:

Token: 'A', Tail: 'B+C*D-E'
Token: 'B', Tail: 'C*D-E'
Token: 'C*D', Tail: 'E'
Token: 'E', Tail: ''

如您所见,这并非什么高深的技术!这是一个非常简单且方便的类。

总结:

  • 创建一个 CTokenizer 类型的对象,并将要分割的字符串和分隔符作为参数传递。
  • 调用 Next(),直到它返回 false
  • 如果您需要更改分隔符,请调用 SetDelimiters()
  • 如果您需要未分割部分的字符串,请调用 Tail()

更新

  • 2001年10月22日 使用 std::bitset 代替 std::vector。减少了内存需求并提高了性能。
  • 2001年10月22日 修复了与 ASCII 字符 127 以上相关的问题。John Simpsons 报告了此问题。
© . All rights reserved.