MFC Cstring类的拆分功能

Dha*_*rma 21 mfc visual-c++

如何CString在vc ++中通过分隔符拆分对象?

例如,我有一个string

"一+二+三+四"

变成一个CString可变的.

sje*_*397 32

此问题类似:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • [CStringT :: Tokenize()的文档](http://msdn.microsoft.com/en-us/library/k4ftfkd2.aspx)说该函数跳过前导分隔符,所以如果你真的想要分割一个字符串和不要忽略空子串,然后我会说你不能使用`Tokenize()`.例如,"+ one + two + three + four"不会产生5个子串的预期结果. (4认同)

Dha*_*rma 21

CString sInput="one+two+three";
CString sToken=_T("");
int i = 0; // substring index to extract
while (AfxExtractSubString(sToken, sInput, i,'+'))
{   
   //.. 
   //work with sToken
   //..
   i++;
}
Run Code Online (Sandbox Code Playgroud)

MSDN上的AfxExtractSubString.

  • 你可以回答你自己的问题.它在FAQ中. (6认同)
  • 这是蹩脚的OO和糟糕的API的一个问题 - 各地的功能:)很好的发现. (3认同)
  • 我会将逗号分隔符更改为加号,否则示例将不起作用. (2认同)

小智 10

int i = 0;
CStringArray saItems;
for(CString sItem = sFrom.Tokenize(" ",i); i >= 0; sItem = sFrom.Tokenize(" ",i))
{
    saItems.Add( sItem );
}
Run Code Online (Sandbox Code Playgroud)


sje*_*397 8

在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("+"));
}

// ...
Run Code Online (Sandbox Code Playgroud)