我观察到一个奇怪的问题,但无法弄清楚为什么会这样。任何对此表示感谢。
这是我的代码:
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/