2012-09-25 57 views
2

我正在使用CString::Tokenize方法來使用分隔符來標記字符串,但我注意到一些奇怪的事情,我在循環中調用了我的字符串上的該方法,因爲我想檢索字符串內的所有標記,這裏是我的代碼:CString Tokenization問題

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」後的字符也會跳過一個迭代!

回答

2

您在for循環中增加nTokenPos。這就是第二個標記被破壞的原因。 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); 
} 
+0

我增加了,因爲我要檢索的字符串中的所有令牌 –

+1

你不需要它,'Tokenize'將遞增它。例如查看更新的答案。 – Rost

+0

但在分隔符之後僅輸出令牌! –