Comment diviser un objet CString
par un délimiteur dans vC++?Fonctionnalité de partage pour MFC Cstring Classe
Par exemple, j'ont une valeur string
"un + deux + trois + quatre"
dans un CString
varable.
Comment diviser un objet CString
par un délimiteur dans vC++?Fonctionnalité de partage pour MFC Cstring Classe
Par exemple, j'ont une valeur string
"un + deux + trois + quatre"
dans un CString
varable.
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);
}
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("+"));
}
// ...
CString sInput="one+two+three";
CString sToken=_T("");
int i = 0; // substring index to extract
while (AfxExtractSubString(sToken, sInput, i,'+'))
{
//..
//work with sToken
//..
i++;
}
C'est un problème avec OO crappy et API pauvres - fonctions partout :) Bonne trouvaille. – sje397
Vous pouvez répondre à votre question. C'est dans la FAQ. – sje397
Je voudrais remplacer le séparateur virgule par un signe plus, sinon l'exemple ne fonctionnera pas. – TechNyquist
int i = 0;
CStringArray saItems;
for(CString sItem = sFrom.Tokenize(" ",i); i >= 0; sItem = sFrom.Tokenize(" ",i))
{
saItems.Add(sItem);
}
Salut, Tokenize n'est pas pris en charge dans VCF MFC, mais pris en charge dans ATL – Dharma
Vous devez probablement ajouter cette condition à la question. – sje397
[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