【发布时间】:2011-03-09 23:58:38
【问题描述】:
如何在 vc++ 中通过分隔符拆分 CString 对象?
例如我有一个string 值
“一+二+三+四”
转换为CString 变量。
【问题讨论】:
标签: visual-c++ mfc
如何在 vc++ 中通过分隔符拆分 CString 对象?
例如我有一个string 值
“一+二+三+四”
转换为CString 变量。
【问题讨论】:
标签: visual-c++ mfc
CString sInput="one+two+three";
CString sToken=_T("");
int i = 0; // substring index to extract
while (AfxExtractSubString(sToken, sInput, i,'+'))
{
//..
//work with sToken
//..
i++;
}
【讨论】:
在 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("+"));
}
// ...
【讨论】:
TCHAR * str = (LPCTSTR)cstr 将抛出编译器错误a value of type "LPCTSTR" cannot be used to initialize an entity of type "TCHAR *"。你应该使用TCHAR * str = cstr.GetBuffer();
int i = 0;
CStringArray saItems;
for(CString sItem = sFrom.Tokenize(" ",i); i >= 0; sItem = sFrom.Tokenize(" ",i))
{
saItems.Add( sItem );
}
【讨论】:
类似于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);
}
【讨论】:
Tokenize()。例如,“+一+二+三+四”不会产生 5 个子字符串的预期结果。