web-dev-qa-db-fra.com

Fonctionnalité de partage pour la classe de chaîne MFC

Comment diviser un objet CString par délimiteur en vc ++?

Par exemple, j'ai une valeur string

dans une variable CString.

.

21
Dharma

Similaire à cette 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);
}
32
sje397
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 sur MSDN .

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

Dans VC6, où CString n'a pas de méthode Tokenize, vous pouvez vous en remettre à 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("+"));
}

// ...
8
sje397