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

不會飛的鳥

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>
            一本色道久久综合狠狠躁的推荐| 亚洲婷婷国产精品电影人久久| 久久精品国产免费看久久精品| 亚洲一本大道在线| 国产日本欧美视频| 久久天天躁夜夜躁狠狠躁2022| 久久精品99久久香蕉国产色戒| 精品9999| 99精品欧美一区二区三区| 国产精品超碰97尤物18| 欧美在线免费播放| 久久只精品国产| 99在线|亚洲一区二区| a4yy欧美一区二区三区| 国产婷婷成人久久av免费高清| 久久婷婷国产综合尤物精品| 欧美成人免费网站| 亚洲永久免费av| 久久久人成影片一区二区三区| 亚洲娇小video精品| 亚洲视频精选| …久久精品99久久香蕉国产| 亚洲精品偷拍| 激情丁香综合| 日韩午夜视频在线观看| 国产自产精品| 99精品99| 亚洲国产毛片完整版| 一区二区三区日韩欧美| 在线看片欧美| 午夜精品福利在线| 99爱精品视频| 久久久午夜电影| 午夜精品福利在线观看| 欧美成人一区二免费视频软件| 午夜国产精品视频免费体验区| 久久一区二区三区四区五区| 亚洲欧美在线免费观看| 欧美剧在线观看| 狂野欧美激情性xxxx欧美| 国产精品久久久久久久久免费桃花| 麻豆av一区二区三区久久| 国产精品麻豆成人av电影艾秋| 欧美国产日产韩国视频| 国产区精品视频| 国产精品99久久久久久www| 亚洲国产99| 久久狠狠婷婷| 久久国产精品久久久久久电车 | 性18欧美另类| 欧美精品日韩综合在线| 免费在线成人| 影音先锋中文字幕一区二区| 亚洲欧美亚洲| 午夜日韩在线| 国产精品久久看| 9久re热视频在线精品| 亚洲精品国产精品乱码不99| 久久免费观看视频| 蜜桃av噜噜一区二区三区| 国产色产综合产在线视频| 亚洲综合国产激情另类一区| 午夜精品一区二区三区在线视| 欧美日韩中文精品| 一区二区三区免费看| 亚洲一区二区免费视频| 欧美午夜精品一区二区三区| 99精品国产在热久久下载| 亚洲一区黄色| 国产精品私拍pans大尺度在线| 亚洲视频网在线直播| 午夜天堂精品久久久久| 国产精品一区在线观看| 午夜在线视频观看日韩17c| 久久久精品国产99久久精品芒果| 狠狠色狠狠色综合日日91app| 欧美综合激情网| 媚黑女一区二区| 亚洲伦理精品| 欧美午夜精品久久久| 亚洲欧美激情四射在线日| 久久精品免视看| 亚洲成人在线免费| 欧美激情综合| 亚洲自拍偷拍视频| 猫咪成人在线观看| 99re在线精品| 国产欧美不卡| 老司机免费视频久久| 日韩一级大片在线| 久久精品国产99精品国产亚洲性色| 国产综合色一区二区三区| 欧美.www| 亚洲与欧洲av电影| 免费久久99精品国产| 在线亚洲精品福利网址导航| 国产九九精品视频| 女女同性精品视频| 亚洲色无码播放| 欧美成人视屏| 性欧美8khd高清极品| 亚洲国产欧美精品| 国产精品人成在线观看免费| 久久久久五月天| 亚洲午夜三级在线| 亚洲第一天堂av| 午夜精品视频网站| 91久久在线观看| 国产一区二区黄色| 欧美日韩在线亚洲一区蜜芽| 久久久xxx| 亚洲永久免费av| 91久久久久久久久久久久久| 久久国产88| 亚洲图片欧美一区| 亚洲承认在线| 国产主播一区| 国产精品伊人日日| 欧美日韩视频一区二区三区| 久久免费视频一区| 性欧美长视频| 亚洲一区网站| 一区二区三区日韩| 亚洲国产专区校园欧美| 麻豆精品传媒视频| 久久九九国产精品| 午夜精品久久久久久久蜜桃app | 亚洲欧美卡通另类91av| 亚洲国产精品欧美一二99| 国产日产精品一区二区三区四区的观看方式 | 欧美激情精品久久久六区热门 | 另类图片国产| 久久国产日韩| 香蕉久久夜色精品国产使用方法 | 性做久久久久久久久| 在线视频欧美一区| 一区二区欧美日韩| 妖精成人www高清在线观看| 亚洲国产精品黑人久久久| 伊人久久婷婷| 在线精品视频免费观看| 狠狠色综合色综合网络| 国内精品久久久久久影视8 | 欧美日韩亚洲一区三区| 欧美精品在线播放| 欧美日本国产| 欧美日韩国产大片| 欧美新色视频| 国产日产亚洲精品| 国产揄拍国内精品对白| 狠狠色综合网站久久久久久久| 国产一区二区福利| 在线观看亚洲专区| 亚洲毛片一区| 亚洲一线二线三线久久久| 亚洲欧美综合精品久久成人 | 91久久久久久久久| 日韩视频精品在线观看| 日韩午夜电影| 亚洲欧美日韩国产成人精品影院| 午夜精品成人在线视频| 久久久不卡网国产精品一区| 蜜桃伊人久久| 99这里只有久久精品视频| 亚洲午夜视频| 久久久久久香蕉网| 欧美日韩精品二区第二页| 国产精品久久久久久妇女6080| 国产视频亚洲精品| 亚洲经典在线| 亚洲伊人观看| 久久亚洲精选| 亚洲精品视频在线看| 亚洲一区二区在线| 美女精品在线| 国产精品视频| 91久久中文| 久久精品视频在线看| 亚洲国产一区二区精品专区| 亚洲午夜三级在线| 男人的天堂亚洲在线| 国产精品一二三| 亚洲精品一二| 久久人人爽人人| 一区二区三区av| 久久午夜羞羞影院免费观看| 国产精品啊v在线| 亚洲人成网站999久久久综合| 亚洲综合电影| 亚洲第一毛片| 久久aⅴ国产紧身牛仔裤| 欧美日韩一区二区三区四区在线观看 | 国产精品成人免费| 亚洲国产一区二区三区高清| 香蕉久久a毛片| 91久久国产综合久久| 久久人体大胆视频| 国产日韩精品一区二区三区| 一片黄亚洲嫩模| 欧美黑人多人双交|