我发现了一个奇怪的问题但却无法弄清楚为什么会这样。对此的任何意见都非常赞赏
这是我的代码
CString strValue;
strValue = "99 Stop ";
CString strToken;
int pos = 2;
strToken = strValue.Tokenize(_T("\t"), pos);
cout << strToken;
//这将返回正确的“停止”(请注意该行每个条目都有一个标签分隔符)
但是,输入
strValue = "100 Start "
返回的strToken为“0”。 有关于此的任何想法吗?
答案 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
神秘解决了。