2010-06-30 5 views

Antwort

28

Ähnlich 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

Hallo, ist tokenize nicht in VC6 MFC unterstützt, aber unterstützt in ATL – Dharma

+0

Sie sollten wahrscheinlich diese Anforderung auf die Frage hinzuzufügen. – sje397

+4

[Die Dokumente für CStringT :: Tokenize()] (http://msdn.microsoft.com/en-us/library/k4ftfkd2.aspx) sagen, dass die Funktion führende Trennzeichen überspringt, wenn Sie also wirklich eine Zeichenkette teilen wollen und ignoriere leere Teilstrings nicht, dann würde ich sagen, dass du 'Tokenize()' nicht benutzen kannst. Zum Beispiel würde "+ eins + zwei + drei + vier" nicht das erwartete Ergebnis von 5 Teilzeichenfolgen ergeben. – herzbube

7

In VC6, wo CString keine tokenize Methode hat, können Sie auf die strtok Funktion und Freunde verschieben.

#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

Das ist ein Problem mit beschissenen OO und schlechten APIs - funktioniert überall :) Gut finden. – sje397

+6

Sie können Ihre eigene Frage beantworten. Es ist in den FAQ. – sje397

+1

Ich würde das Kommatrennzeichen in ein Pluszeichen ändern, oder das Beispiel wird nicht funktionieren. – TechNyquist

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