2010-06-30 232 views

回答

28

類似this question

CString str = _T("one+two+three+four"); 

int nTokenPos = 0; 
CString strToken = str.Tokenize(_T("+"), nTokenPos); 

while (!strToken.IsEmpty()) 
{ 
    // do something with strToken 
    // .... 
    strToken = str.Tokenize(_T("+"), nTokenPos); 
} 
+0

嗨,Tokenize在VC6 MFC中不受支持,但在ATL中支持 – Dharma 2010-06-30 09:07:04

+0

您應該在問題中添加該要求。 – sje397 2010-06-30 09:18:26

+4

[CStringT :: Tokenize()](http://msdn.microsoft.com/en-us/library/k4ftfkd2.aspx)的文檔說該函數跳過了前導分隔符,所以如果你真的想分割一個字符串並且不會忽略空的子字符串,那麼我會說你不能使用'Tokenize()'。例如,「+一+二+三+四」不會產生5個子串的預期結果。 – herzbube 2012-02-24 11:11:43

7

在VC6,其中CString的沒有一個記號化方法,可以推遲到strtok功能和它的朋友。

#include <tchar.h> 

// ... 

CString cstr = _T("one+two+three+four"); 
TCHAR * str = (LPCTSTR)cstr; 
TCHAR * pch = _tcstok (str,_T("+")); 
while (pch != NULL) 
{ 
    // do something with token in pch 
    // 
    pch = _tcstok (NULL, _T("+")); 
} 

// ... 
18
CString sInput="one+two+three"; 
CString sToken=_T(""); 
int i = 0; // substring index to extract 
while (AfxExtractSubString(sToken, sInput, i,'+')) 
{ 
    //.. 
    //work with sToken 
    //.. 
    i++; 
} 

AfxExtractSubString on MSDN

+2

這是一個蹩腳的面向對象問題和糟糕的API--遍佈各處的功能:)好的發現。 – sje397 2010-06-30 09:34:13

+6

你可以回答你自己的問題。它在FAQ中。 – sje397 2010-07-14 15:38:26

+1

我會將逗號分隔符更改爲加號,否則該示例將不起作用。 – TechNyquist 2014-11-25 07:55:19

7
int i = 0; 
CStringArray saItems; 
for(CString sItem = sFrom.Tokenize(" ",i); i >= 0; sItem = sFrom.Tokenize(" ",i)) 
{ 
    saItems.Add(sItem); 
}