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

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;
}

posted on 2010-06-13 13:14  cy163  阅读(...)  评论(...编辑  收藏

导航