引子
之前写的一篇博客非常好用的MFC隐藏函数 取字符串的任意分隔符子串提到了分割字符串的函数
AfxExtractSubString
这个函数每次只能按一种分隔符分割字符串(比如每次只能按空格或者逗号或者tab来分割),下面列出一个可以同时按任意分隔符(比如字符串里同时由逗号空格或tab)分割字符串的函数(注意如果有多个分隔符直接相连,输出可以为空或指定的nullSubst)
代码
/*
* 该函数用delimits里的字符拆分s,传出一个CStringList指针pList,
* 若trim为真,则不保留分割后的空串(注意不是空白字符)。比如:
* Tokenize( "a,bc;,d,", ",;", &out_list, TRUE)
* 会返回3个串:a、bc、d。
* 若trim为FALSE,则用nullSubst用来替代分割后的空串,比如:
* Tokenize( "a,bc;,d;", ",;", &out_list, FALSE,"[null]" )
* 会返回5个串:a、bc、[null]、d、[null]。
* trim默认为FALSE,nullSubst默认为空串。
*/
void iTokenize(CString s, CString delimits, CStringList* pList, BOOL trim=FALSE, CString nullSubst="")
{
ASSERT( !s.IsEmpty() && !delimits.IsEmpty() );
s += delimits[0];
for( long index=-1; (index=s.FindOneOf((LPCTSTR)delimits))!=-1; )
{
if(index != 0) pList->AddTail( s.Left(index) );
else if(!trim) pList->AddTail(nullSubst);
s = s.Right(s.GetLength()-index-1);
}
}

1565

被折叠的 条评论
为什么被折叠?



