青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

不會飛的鳥

2010年12月10日 ... 不鳥他們!!! 我要用自己開發的分布式文件系統、分布式調度系統、分布式檢索系統, 做自己的搜索引擎!!!大魚有大志!!! ---楊書童

【轉】STL_string的字符串替換函數

標準C++中的string中的函數不多,沒有CString的功能強大,但是如果想在Unicode編碼下使用多字節,就不能使用CString,于是自己寫了一個類似于CString的Replace函數。
string replace( const string& inStr, const char* pSrc, const char* pReplace )
{
     string str = inStr;
    string::size_type stStart = 0;
    string::iterator iter = str.begin();
    while( iter != str.end() )
    {
        // 從指定位置 查找下一個要替換的字符串的起始位置。
        string::size_type st = str.find( pSrc, stStart );
        if ( st == str.npos )
        {
            break;
        }
        iter = iter + st - stStart;
        // 將目標字符串全部替換。
        str.replace( iter, iter + strlen( pSrc ), pReplace );
        iter = iter + strlen( pReplace );
        // 替換的字符串下一個字符的位置
        stStart = st + strlen( pReplace );
    }
    return str;
}

上述方法在執行replace( "h h h h h h h h h h h h h h h h h h h ", " ", " " )時出現問題。
下面再列出一種方法:
string CComFunc::replace( const string& inStr, const char* pSrc, const char* pReplace )
{
    string strSrc = inStr;
    string::size_type pos=0;      
    string::size_type srclen = strlen( pSrc );       
    string::size_type dstlen = strlen( pReplace );       
    while( (pos=strSrc.find(pSrc, pos)) != string::npos)
    {               
        strSrc.replace(pos, srclen, pReplace);               
        pos += dstlen;       
    }
    return strSrc;
}

補充,經過測試,上面方法再執行,replace( “暴”, "\\","==" )時,依然會遇到問題。
在日文系統上,因為“暴”占兩個字節,而"\\"只占一個字節,但與“暴”的低位字節ASCII碼相同。
而string的Find函數,是按照字節比較的,所以,將這個字節替換了,導致文本替換出現問題。
于是考慮到不應該按字節比較,應該按字符比較,測試發現,CString的替換函數沒有問題,于是考慮按照CString的方法重新寫一個replace函數。
代碼如下:
因為CString在_MBCS和_UNICODE下是變寬的,而我寫的replace函數,只針對string。
string CComFunc::replace( const string& inStr, const char* pSrc, const char* pReplace )
{
    string strSrc = inStr;
    LPSTR lpch = ( CHAR* )strSrc.c_str();
    int   nOldLength = strlen( lpch );
    int    nSourceLen = strlen(pSrc);
    if (nSourceLen == 0)
    {
        return lpch;
    }
    int   nReplacementLen = strlen(pReplace);
    LPSTR lpszStart = lpch;
    LPSTR lpszEnd = lpszStart + nOldLength;
    LPSTR lpszTarget;

    // 先列出判斷替換字符是否存在的方法, 但在此函數中不使用這段代碼。
/*
    // judge whether exist
    while (lpszStart < lpszEnd)
    {
        while ((lpszTarget = (CHAR*)_mbsstr(( const unsigned char * )lpszStart, ( const unsigned char * )pSrc)) != NULL)
        {
            nCount++;
            lpszStart = lpszTarget + nSourceLen;
        }
        lpszStart += strStart.length() + 1;
    }
    *//
   
    // 下面是替換的代碼。
    while (lpszStart < lpszEnd)
    {
        while ((lpszTarget = (CHAR*)_mbsstr(( const unsigned char * )lpszStart, ( const unsigned char * )pSrc)) != NULL)
        {
            int nBalance = nOldLength - (lpszTarget - lpch + nSourceLen);
            memmove(lpszTarget + nReplacementLen, lpszTarget + nSourceLen,
                nBalance * sizeof(CHAR));
            memcpy(lpszTarget, pReplace, nReplacementLen*sizeof(CHAR));
            lpszStart = lpszTarget + nReplacementLen;
            lpszStart[nBalance] = '\0';
            nOldLength += (nReplacementLen - nSourceLen);
        }
        lpszStart += strlen(lpszStart) + 1;
    }
    return lpch;
}

此方法最關鍵的是_mbsstr函數,在"MBSTRING.H"頭文件中聲明。

posted on 2012-10-26 16:20 不會飛的鳥 閱讀(1482) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美久久在线| 国产精品入口| 亚洲乱码久久| 亚洲精品在线二区| 欧美日韩一区二区欧美激情 | 亚洲欧美日本精品| 国产日韩欧美制服另类| 久久久最新网址| 麻豆成人精品| 亚洲影院在线观看| 欧美一区在线看| 亚洲国产精品999| 亚洲最黄网站| 好吊日精品视频| 欧美激情久久久久| 欧美深夜福利| 另类酷文…触手系列精品集v1小说| 免费一级欧美在线大片| 在线一区免费观看| 久久国产视频网| 99精品国产在热久久| 在线一区二区三区四区| 伊人影院久久| 亚洲一品av免费观看| 亚洲成人在线视频网站| 中日韩视频在线观看| 悠悠资源网亚洲青| 一区二区日韩| 亚洲第一区色| 亚洲在线成人| 99在线精品免费视频九九视| 亚洲一区在线看| 欧美日韩一视频区二区| 久久先锋资源| 亚洲免费一区二区| 毛片一区二区| 久久精品免费观看| 欧美日韩第一页| 你懂的一区二区| 国产三级精品三级| 91久久国产精品91久久性色| 国产日本欧美在线观看| 亚洲精品偷拍| 亚洲精品视频在线| 久久久精品一区| 欧美一区二区三区播放老司机 | 久久成人亚洲| 亚洲免费视频一区二区| 欧美国产视频日韩| 欧美肥婆在线| 亚洲成人中文| 久久露脸国产精品| 久久米奇亚洲| 国产情人综合久久777777| 日韩视频不卡| 一本色道久久综合亚洲精品按摩| 久久综合亚州| 免费精品99久久国产综合精品| 国产精品日韩一区二区三区| 亚洲精选视频免费看| 亚洲美女在线观看| 欧美成人精品在线播放| 欧美激情视频一区二区三区在线播放 | 一区二区欧美亚洲| 中文精品视频| 国产精品入口福利| 亚洲在线视频免费观看| 欧美一区二区三区婷婷月色| 国产精品男女猛烈高潮激情| 一区二区三区国产精品| 亚洲欧美日韩天堂| 国产麻豆精品视频| 午夜一区不卡| 久久人人97超碰国产公开结果| 国产综合18久久久久久| 久久福利毛片| 欧美国产日韩亚洲一区| 亚洲高清三级视频| 欧美日韩国语| 亚洲欧美日韩系列| 久久尤物视频| 亚洲裸体俱乐部裸体舞表演av| 欧美美女视频| 亚洲一区在线播放| 久久久免费av| 在线日韩av永久免费观看| 欧美成人精品h版在线观看| av成人国产| 久久精品99无色码中文字幕| 一区二区亚洲| 欧美视频一区二区在线观看| 欧美亚洲在线视频| 亚洲福利在线视频| 亚洲欧美国产精品va在线观看| 国产精品色午夜在线观看| 久久成人精品视频| 91久久国产自产拍夜夜嗨| 亚洲欧美资源在线| 136国产福利精品导航网址| 欧美人与禽性xxxxx杂性| 亚洲永久字幕| 亚洲大胆在线| 久久精品国产亚洲高清剧情介绍| 亚洲欧洲日本mm| 国产精品一国产精品k频道56| 久久亚洲春色中文字幕久久久| 亚洲精品乱码久久久久久日本蜜臀| 欧美影片第一页| 99re这里只有精品6| 国产麻豆9l精品三级站| 欧美黄色一级视频| 欧美在线视屏| 亚洲一区图片| 日韩视频中文字幕| 奶水喷射视频一区| 性久久久久久久久| 日韩视频永久免费| 亚洲国产高清自拍| 国产一区二区三区黄| 欧美日韩国产一区| 欧美99在线视频观看| 欧美专区日韩视频| 亚洲在线1234| 一区二区三区av| 亚洲精品免费一二三区| 男同欧美伦乱| 美女精品在线观看| 久久成人精品| 欧美综合二区| 亚洲欧美国产va在线影院| 99精品国产在热久久| 91久久久亚洲精品| 影音先锋成人资源站| 国产情人综合久久777777| 国产精品人人做人人爽人人添| 欧美日韩国产123| 欧美日韩国产首页在线观看| 免费成人av在线看| 欧美成人官网二区| 欧美精品一区二区三区久久久竹菊 | 日韩视频免费在线观看| 亚洲欧洲在线看| 亚洲黄一区二区三区| 亚洲国产老妈| 亚洲黄色三级| 亚洲精品日韩在线| 一本色道久久88综合亚洲精品ⅰ | 亚洲欧洲免费视频| 91久久夜色精品国产网站| 亚洲欧洲视频在线| 夜夜爽夜夜爽精品视频| 亚洲视频1区2区| 午夜精品一区二区三区在线播放 | 巨乳诱惑日韩免费av| 久久综合亚洲社区| 欧美大片一区二区| 亚洲品质自拍| 亚洲最新在线| 午夜电影亚洲| 久久天天躁狠狠躁夜夜爽蜜月| 理论片一区二区在线| 欧美成va人片在线观看| 欧美日韩在线观看视频| 国产精品亚洲视频| 国产综合亚洲精品一区二| 亚洲国产小视频在线观看| 亚洲精品综合| 亚洲欧美日韩精品| 久久婷婷av| 最新国产拍偷乱拍精品 | 久久久久久久尹人综合网亚洲| 久久久www成人免费毛片麻豆| 久久久人人人| 亚洲日本久久| 欧美在线观看网址综合| 美腿丝袜亚洲色图| 国产精品久久国产愉拍| 在线成人欧美| 亚洲欧美视频在线| 欧美成年人视频| 正在播放欧美视频| 久久婷婷综合激情| 欧美视频在线免费| 激情成人中文字幕| 亚洲自拍三区| 欧美激情中文字幕在线| 亚洲欧美日本伦理| 欧美精品乱码久久久久久按摩| 国产日韩av在线播放| 亚洲精品久久久蜜桃| 久久久久久久久伊人| 99精品视频一区| 免费永久网站黄欧美| 国产精品一区二区在线观看| 亚洲免费观看高清在线观看| 久久久久久综合| 亚洲午夜精品网| 欧美日韩国产综合视频在线| 亚洲成色777777在线观看影院| 性欧美大战久久久久久久久|