2010-06-30 4 views

Répondre

28

similaires à 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

Salut, Tokenize n'est pas pris en charge dans VCF MFC, mais pris en charge dans ATL – Dharma

+0

Vous devez probablement ajouter cette condition à la question. – sje397

+4

[Les documents pour CStringT :: Tokenize()] (http://msdn.microsoft.com/en-us/library/k4ftfkd2.aspx) indiquent que la fonction ignore les délimiteurs principaux, donc si vous voulez vraiment diviser une chaîne et ne pas ignorer les sous-chaînes vides, alors je dirais que vous ne pouvez pas utiliser 'Tokenize()'. Par exemple, "+ un + deux + trois + quatre" ne donnerait pas le résultat attendu de 5 sous-chaînes. – herzbube

7

Dans VC6, où CString ne dispose pas d'une méthode Tokenize, vous pouvez reporter à la fonction strtok et ses amis.

#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

C'est un problème avec OO crappy et API pauvres - fonctions partout :) Bonne trouvaille. – sje397

+6

Vous pouvez répondre à votre question. C'est dans la FAQ. – sje397

+1

Je voudrais remplacer le séparateur virgule par un signe plus, sinon l'exemple ne fonctionnera pas. – TechNyquist

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