您的位置:首页 > 编程语言 > C语言/C++

一个类似Java String[] split(String regex)的VC++函数

2010-06-13 13:14 387 查看
http://hi.baidu.com/ccskun/blog/item/9c4d033219ab5bfe1b4cff41.html/cmtid/1ce9b84445d57e2dcffca3d3

INT_PTR Split_CString(const CString& source,//需要截取的原字符串
CStringArray& dest,//分割后的字符串数组
const CString& division//用做分割符的字符串
)//使用方式:Split(strViewString, dest, "<div id="pro_detail">");
{
if( source.IsEmpty() )
return -1;
dest.RemoveAll();
int len = division.GetLength();
int iFirst = 0;
int nCount = 0;
int pos = 0;
int pre_pos = -1;
while( -1 != pos )
{
if( -1 == pre_pos )
pos = source.Find(division,pos);
else
pos = source.Find(division,(pos+1));

if( -1 == pre_pos )
{
iFirst = 0;
if( -1 == pos )
nCount = source.GetLength();
else
nCount = pos;
}
else
{
iFirst = pre_pos+len;
if( -1 != pos )
nCount = pos - pre_pos - len;
else
nCount = source.GetLength()-pre_pos-len;
}

dest.Add(source.Mid(iFirst,nCount));

pre_pos = pos;
}

return dest.GetCount();

我也写了一个,

Int PA_CStringSplit(CString strSource, CString strSplitter, CStringArray &saDestination) {
INT m_iLen_source = strSource.GetLength();
INT m_iLen_splitter = strSplitter.GetLength();
INT iStart = 0;
INT iLen = 0;
INT iPos = 0;
saDestination.RemoveAll();
do {
iPos = strSource.Find(strSplitter, iStart);
if ( -1== iPos) {
iLen = m_iLen_source - iStart;
} else {
iLen = iPos - iStart;
}
saDestination.Add(strSource.Mid(iStart, iLen));
iStart += iLen + m_iLen_splitter;
} while (iStart < m_iLen_source);
return TRUE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: