Programming 版 (精华区)

发信人: SwordLea (飞刀李), 信区: Programming
标  题: 不用MFC的字符串类
发信站: 哈工大紫丁香 (2004年04月08日15:42:33 星期四), 站内信件

不想连接MFC库,也不想连接MSVCP60库,
所以不能使用CString和string。仿照
CString写了一个类,可以完成替换等
操作,自己试用没问题。
大家帮忙看看有没有bug,或者扩充些
新功能,比如Find,ToUpper等。

class CNoMFCString
{
private:
    char * m_str;
public:
    CSagaString() 
    {
        m_str = NULL;
    }
    CSagaString(LPCTSTR lpStr) 
    {
        m_str = NULL;
        if (lpStr)
        {
            m_str = new char[strlen(lpStr) + 1];
            strcpy(m_str ,lpStr);
        }
    }
    ~CSagaString() 
    { 
        if (m_str)
        {
            delete m_str ;
            m_str = NULL;
        }
    }
    BOOL Replace(LPCTSTR pSrc, LPCTSTR pTarget)
    {
        if ( m_str == NULL || pSrc == NULL) return false;

        int nLen = strlen(m_str) ,nLenS = strlen(pSrc);
        BOOL bFlag = false;
        for (char *pTmp = strstr(m_str, pSrc); pTmp != NULL; pTmp = 
strstr(m_str, pSrc))
        {
            if (pTarget)
            {
                int nLenT = strlen(pTarget);
                if (nLenS >= nLenT)
                {
                    char *p1 = pTmp; 
                    p1 += nLenS;
                    strcpy(pTmp, pTarget);
                    strcat(pTmp, p1);
                }
            }
            else
            {
                // 找到串清除
                if (nLenS )
                {
                    strcpy(pTmp , pTmp + nLenS);
                }
            }
            bFlag = true;
        }
        return bFlag ;
    }
    int GetLength() { return strlen(m_str);}
    operator LPCTSTR ()
    {
        return m_str;
    }
}; 
// 测试用例

    CNoMFCString str("Hello World!");
    str.Replace("World","HIT");

// 输出结果:
   Hello HIT!
--
    如果程序员来到了程序设计版,
    那么他就不会再牛,
    更不会随便给予了。  

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.246.241]
※ 修改:·SwordLea 於 04月08日15:44:03 修改本文·[FROM: 202.118.246.241]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.110毫秒