Функциональность Split для класса MFC Cstring
Как разделить объект CString
на delimeter в vС++?
Например, у меня есть значение string
"один + два + три + четыре"
в a CString
varable.
Ответы
Ответ 1
Как этот вопрос:
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);
}
Ответ 2
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 в MSDN.
Ответ 3
В VC6, где CString не имеет метода Tokenize, вы можете отложить функцию 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("+"));
}
// ...
Ответ 4
int i = 0;
CStringArray saItems;
for(CString sItem = sFrom.Tokenize(" ",i); i >= 0; sItem = sFrom.Tokenize(" ",i))
{
saItems.Add( sItem );
}