16,471
社区成员
发帖
与我相关
我的任务
分享
#define ESSF_ALLOWHEADEMPTY 0x01 //指定源串以分割符开头时,split出一个"",否则不
#define ESSF_ALLOWTAILEMPTY 0x02 //指定源串以分割符结尾时,split出一个"",否则不
#define ESSF_ALLOWMIDEMPTY 0x04 //指定遇到连续两个分割符,split出一个"",否则不
#define ESSF_ALLOWFULLEMPTY 0x08 //指定当源串为""时,split出一个子串"",否则不
#define ESSF_TRIMHEAD 0x10 //split前trim lef
#define ESSF_TRIMTAIL 0x20 //split前trim right
void ExtractSubStrings(CStringArray& arr, LPCTSTR strSrc, const CString sep, DWORD nFlags)
{
if (strSrc == NULL)
return;
//clear array
arr.RemoveAll();
//trim
CString str(strSrc);
if (nFlags & ESSF_TRIMHEAD) str.TrimLeft();
if (nFlags & ESSF_TRIMTAIL) str.TrimRight();
//full empty
if(str.IsEmpty()) {
if (nFlags & ESSF_ALLOWFULLEMPTY) arr.Add(_T(""));
return;
}
// 开始分解
bool ishead=true;
int pos = str.Find(sep);
while (pos != -1)
{
if (!str.Left(pos).IsEmpty() ||ishead && (nFlags & ESSF_ALLOWHEADEMPTY) || !ishead && (nFlags & ESSF_ALLOWMIDEMPTY))
arr.Add(str.Left(pos));
ishead = false;
str = str.Mid(pos + sep.GetLength());
pos = str.Find(sep);
}
//tail
if (!str.IsEmpty() || (nFlags & ESSF_ALLOWTAILEMPTY))
arr.Add(str);
return;
}