CString标记问题

时间:2012-09-25 10:35:20

标签: c++ mfc tokenize

我正在使用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”之后忽略第一个字符,它也会跳过一次迭代!

1 个答案:

答案 0 :(得分:4)

您在nTokenPos循环中增加for。这就是为什么第二个令牌被打破的原因。 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);
}