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

不會飛的鳥

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 不會飛的鳥 閱讀(1478) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品日韩在线| 欧美成人高清视频| 亚洲一级二级| 国产精品视频一二| 久久久青草青青国产亚洲免观| 久久精品国产一区二区三| 曰韩精品一区二区| 亚洲欧洲在线观看| 国产精品毛片| 欧美不卡高清| 欧美午夜不卡视频| 久久这里有精品15一区二区三区| 另类春色校园亚洲| 亚洲一区二区三区精品在线| 亚洲欧美网站| 亚洲人体偷拍| 午夜精品理论片| 亚洲人www| 亚洲欧美日韩成人| 亚洲欧洲中文日韩久久av乱码| 一级日韩一区在线观看| 韩日欧美一区二区三区| 91久久在线播放| 国产欧美日韩精品专区| 亚洲国产成人精品女人久久久 | 久久精品免费播放| 欧美成黄导航| 久久国产精品亚洲va麻豆| 欧美激情一区在线观看| 久久精品视频在线| 欧美深夜福利| 亚洲电影第三页| 国产欧美日韩综合精品二区| 亚洲国产专区| 在线成人免费视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲观看高清完整版在线观看| 一区二区欧美激情| 亚洲精品综合| 久久亚洲不卡| 久久亚洲国产精品一区二区 | 另类尿喷潮videofree| 香蕉成人啪国产精品视频综合网| 欧美国产综合一区二区| 老司机一区二区三区| 国产日韩欧美日韩大片| 这里只有精品视频| 亚洲视频导航| 欧美精品久久久久久久免费观看| 蜜臀久久99精品久久久久久9 | 欧美日韩国产va另类| 欧美激情精品久久久久久| 国内一区二区三区在线视频| 欧美亚洲一区在线| 欧美亚洲系列| 国产精品视频一| 亚洲综合导航| 久久激情中文| 国产视频一区在线| 欧美一区二区网站| 久久精品国语| 国产在线拍偷自揄拍精品| 新片速递亚洲合集欧美合集| 久久久国产精品一区| 国产亚洲成精品久久| 欧美在线|欧美| 免费成人美女女| 亚洲激情欧美| 欧美日韩在线免费视频| 在线中文字幕不卡| 久久av二区| 精品69视频一区二区三区| 久久亚洲视频| 日韩午夜三级在线| 亚洲欧美日韩视频二区| 国产免费观看久久| 久久成人久久爱| 奶水喷射视频一区| 日韩视频一区二区三区在线播放免费观看 | 美日韩精品视频免费看| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲精品视频免费在线观看| 欧美精彩视频一区二区三区| 宅男噜噜噜66国产日韩在线观看| 午夜精品美女久久久久av福利| 国产精品手机视频| 久久久精品动漫| 亚洲国产精品ⅴa在线观看 | 午夜精品剧场| 影音先锋在线一区| 欧美片第1页综合| 亚洲无线视频| 欧美r片在线| 亚洲性色视频| 精品动漫3d一区二区三区| 欧美激情精品久久久久久蜜臀| 亚洲午夜久久久久久久久电影院| 快she精品国产999| 一区二区欧美在线观看| 国产综合在线视频| 欧美日韩在线视频首页| 久久久www成人免费无遮挡大片 | 老司机精品久久| 在线视频亚洲| 欧美激情第3页| 性做久久久久久久免费看| 亚洲欧洲日本一区二区三区| 国产精品夜夜夜一区二区三区尤| 久久中文字幕一区| 亚洲一级二级在线| 亚洲人体偷拍| 久久综合图片| 久久av一区| 亚洲欧美日韩精品一区二区| 日韩亚洲欧美成人一区| 在线观看日韩av| 国产欧美一区二区精品婷婷| 欧美日本免费一区二区三区| 久久久午夜精品| 亚洲欧美日韩中文视频| 一本一本久久| 亚洲精品1234| 欧美电影在线观看完整版| 久久精品2019中文字幕| 亚洲欧美中文另类| 一区二区三区成人| 日韩午夜激情av| 亚洲国产老妈| 亚洲国产精品一区二区久| 黄页网站一区| 国内精品亚洲| 国内精品久久久久久影视8| 国产精品午夜春色av| 国产精品久久久久久久第一福利 | 国产精品久久久久久模特| 欧美片第一页| 欧美日韩一区二区国产| 欧美人与性动交a欧美精品| 欧美成人中文字幕| 欧美精品一区二区三区在线播放 | 欧美日本不卡| 欧美日韩情趣电影| 欧美午夜在线| 国产精品视频| 国产日韩精品在线| 伊人成人在线| 亚洲人成亚洲人成在线观看图片 | 亚洲电影在线播放| 亚洲国产美女精品久久久久∴| 亚洲成色777777在线观看影院| 黄色一区二区在线| 亚洲国产人成综合网站| 99精品国产在热久久| 正在播放日韩| 欧美一区二区三区成人| 久久久精品一区| 蜜臀久久99精品久久久久久9 | 午夜在线一区| 久久婷婷一区| 亚洲国产日本| 在线视频精品| 欧美在线视频导航| 欧美国产精品劲爆| 欧美三级在线视频| 国产亚洲一区二区三区在线播放| 极品av少妇一区二区| 日韩午夜电影| 久久精品一区二区国产| 亚洲成人在线网| 亚洲午夜久久久久久久久电影院 | 麻豆国产va免费精品高清在线| 欧美激情a∨在线视频播放| 国产精品video| 在线观看欧美视频| 亚洲一级在线观看| 欧美1区视频| 亚洲专区免费| 欧美成人精品在线视频| 国产精品色一区二区三区| 亚洲韩国日本中文字幕| 午夜一区二区三区不卡视频| 欧美高清视频在线播放| 亚洲欧美另类在线| 欧美精品性视频| 一区二区视频免费完整版观看| 亚洲视频网在线直播| 鲁大师成人一区二区三区 | 久久天天综合| 在线一区二区三区四区五区| 男女精品网站| 国产情人节一区| 亚洲无吗在线| 亚洲高清久久| 久久精品国内一区二区三区| 国产精品高清免费在线观看| 亚洲精品一二| 欧美夫妇交换俱乐部在线观看| 亚欧美中日韩视频| 国产精品毛片a∨一区二区三区| 99综合视频|