我观察到一个奇怪的问题,但无法弄清楚为什么会这样。任何对此表示感谢。

这是我的代码:

CString strValue;
strValue = "99\tStop\t";

CString strToken;
int pos = 2;
strToken = strValue.Tokenize(_T("\t"), pos);

cout << strToken;


这将返回正确的“ Stop”(请注意,该行的每个条目都有一个制表符分隔符)

但是,对于输入

strValue = "100\tStart\t"


返回的strToken为“ 0”。

有什么想法吗?

最佳答案

嗯...好我认为您所观察到的是预期的。阅读此Tokenize之后。

编写此部分:CStringT Tokenize( PCXSTR pszTokens, int& iStart ) const; [...]“在每次调用Tokenize时,该函数从iStart开始,跳过前导定界符,并返回一个包含当前令牌的CStringT对象,该对象是直到下一个定界符的字符串”。

您从位置2开始。

"99  Stop    "
"100  Start  "
 012  <-- pos


pos = 2的第一种情况下,您从\t开始并忽略所有前导定界符,并返回字符串,直到下一个为Stop。在第二种情况下,您从0开始,下一个字符是指定的分隔符,因此您从pos = 2\t都得到字符串,它只是一个字符0

谜团已揭开。

关于c++ - C++ CString Tokenize奇怪的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23927834/

10-12 13:36