c ++ CString Tokenize奇怪的问题

时间:2014-05-29 07:13:29

标签: c++ mfc

我发现了一个奇怪的问题但却无法弄清楚为什么会这样。对此的任何意见都非常赞赏

这是我的代码

CString strValue;
strValue = "99  Stop    ";

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

cout << strToken;

//这将返回正确的“停止”(请注意该行每个条目都有一个标签分隔符)

但是,输入

strValue =  "100    Start   "

返回的strToken为“0”。 有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:2)

呃......好的。我认为你所观察到的是预期的。阅读此Tokenize后。

Esp这一部分:CStringT Tokenize( PCXSTR pszTokens, int& iStart ) const; [...]&#34; 在每次调用Tokenize时,函数都从iStart开始,跳过前导分隔符,并返回一个包含当前令牌的CStringT对象,是直到下一个分隔符的字符串。&#34;

从第2位开始。

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

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

神秘解决了。