我正在使用CString::Tokenize
方法来使用定界符对字符串进行标记,但是我注意到了一些奇怪的事情,我在循环内的字符串上调用了该方法,因为我想检索字符串内的所有标记,这是我的代码:
CString strToken;
for(int nTokenPos = 0; nTokenPos < dialog->myValue.GetLength(); nTokenPos++)
{
//TRACE( "The Size of the string is %d\n", dialog->myValue.GetLength());
TRACE( "Iteration No %d\n",nTokenPos);
strToken = dialog->myValue.Tokenize(_T("X"), nTokenPos);
strToken+="\n";
OutputDebugString(strToken);
}
注意:
dialog->myValue
是我要标记化的字符串。例如,当我在“99X1596”上测试该代码时,输出为:Iteration No 0
99
Iteration No 4
596
另一个示例:“4568X6547”
输出:
Iteration No 0
4568
Iteration No 6
547
我不知道为什么它会忽略定界符“X”之后的第一个字符,而且还会跳过一次迭代!
最佳答案
您可以在nTokenPos
循环中增加for
。这就是第二枚 token 被破坏的原因。 CString::Tokenize
更新nTokenPos
并在以下迭代中使用它。
正确用法如下:
CString str = "99X1596";
int curPos = 0;
CString resToken = str.Tokenize(_T("X"), curPos);
while(!resToken.IsEmpty())
{
// Process resToken here - print, store etc
OutputDebugString(resToken);
// Obtain next token
resToken = str.Tokenize(_T("X"), curPos);
}