• <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>
            隨筆 - 64, 文章 - 11, 評(píng)論 - 12, 引用 - 0
            數(shù)據(jù)加載中……

            C++ 字符串操作初析

                   曾經(jīng)有一篇關(guān)于C++程序?qū)懽鞯奈恼?,文章說(shuō)C++程序員要花費(fèi)20%的時(shí)間來(lái)處理字符串方面的細(xì)節(jié)問(wèn)題,甚至更多。可見(jiàn)C++中的字符處理是相當(dāng)復(fù)雜,原因是C++中有著豐富的字符及字符串類(lèi),如STL中的string,wstring,char,wchar_t、還有windows C程序?qū)懽髦蠵TSTR,PWSTR,PTSTR,MFC及ATL中的CString,  BSTR,_bstr_t,CComBSTR,OLESTR,還有一種隨編譯時(shí)是否預(yù)定義了UNICODE而被分析為具體類(lèi)型的TCHAR及這些字符,或封裝類(lèi)的一大把函數(shù)。而我們要用的系統(tǒng)函數(shù),標(biāo)準(zhǔn)庫(kù)函數(shù)或其它庫(kù)函數(shù)。有的要這種字符而沒(méi)有提供接受其它字符的版本。這些原因也就促使了C++程序員往往要花許多的時(shí)間來(lái)處理字符串。上次和朋友聊到寫(xiě)代碼的話題。他說(shuō)一天只能寫(xiě)三百來(lái)行的代碼。確實(shí)要寫(xiě)高效的,高質(zhì)量的C++代碼很要下一番功夫。

                    在上面介紹了許多的字符串,及字符串封裝類(lèi)。實(shí)際上所有的這些類(lèi)都最終可歸結(jié)為C風(fēng)格字符串,也就是字符數(shù)組。目前字符的編碼方案主要有單字節(jié)字符(ANSI)編碼,多字節(jié)字符(MBCS)編碼,還有就是UNICODE編碼。前兩種字符編碼的字符還都是用char這個(gè)數(shù)據(jù)類(lèi)型來(lái)維護(hù)。當(dāng)是多字節(jié)時(shí)典型的就是2個(gè)字節(jié)時(shí),就會(huì)用2個(gè)char來(lái)存儲(chǔ),一個(gè)字節(jié)時(shí)就會(huì)用一個(gè)char來(lái)存儲(chǔ)。這就是串中的字符占多少個(gè)字節(jié)得看具體的字符,不能像原來(lái)一樣一個(gè)一個(gè)地?cái)?shù)就可以知道會(huì)占多少個(gè)字節(jié)。UNICODE則簡(jiǎn)化了這種編碼方案,讓每個(gè)字符都占用相同大小的字節(jié),UNICODE 中的字符是用wchar_t來(lái)定義的,這中編碼方案則是每個(gè)字符都占用兩個(gè)字節(jié)。在這種編碼方案下我們又可以一個(gè)一個(gè)地?cái)?shù)來(lái)算出占用了多少字節(jié),計(jì)算機(jī)可以用一種統(tǒng)計(jì)方式來(lái)處理這種字符串了。雖然犧牲了些內(nèi)存,但換取了邏輯的簡(jiǎn)單性。

                    這里我寫(xiě)了幾個(gè)工具函數(shù),可以方便地在各種數(shù)據(jù)類(lèi)型之間進(jìn)行轉(zhuǎn)換。我認(rèn)為這幾個(gè)函數(shù)會(huì)對(duì)處理字符串提供幫助,所在我就在首頁(yè)發(fā)表了。大家有什么好的想法可以回復(fù)我。另我這兩天會(huì)封裝MSXML來(lái)操作XML,希望大家能給點(diǎn)意見(jiàn)。到時(shí)我可以與相關(guān)參與的人員共享這個(gè)封裝。

            posted on 2008-07-11 23:07 Robertxiao 閱讀(3916) 評(píng)論(7)  編輯 收藏 引用 所屬分類(lèi): C++

            評(píng)論

            # re: C++ 字符串操作初析[未登錄](méi)  回復(fù)  更多評(píng)論   

            WideCharToMultiByte
            MultiByteToWideChar
            包裝了這兩個(gè)API,挺好,
            2008-07-11 23:46 | gohan

            # re: C++ 字符串操作初析  回復(fù)  更多評(píng)論   

            樓主所言極是,確實(shí)在字符串處理方面有點(diǎn)傷神,有時(shí)一個(gè)項(xiàng)目用到了幾個(gè)第三方庫(kù),常常由于函數(shù)接口的字符串類(lèi)型不一致,需進(jìn)行調(diào)整擴(kuò)展。
            2008-07-12 07:31 | 路緣

            # re: C++ 字符串操作初析  回復(fù)  更多評(píng)論   

            我現(xiàn)在就用wstring和string兩種東西。。。其他的基本不用了。
            那點(diǎn)效率我也不大稀罕的。
            至于XML,何必用MSXML,普通的DOM用TinyXML就很好了。
            如果你要支持DTD或者XML Schema這樣的除外。
            2008-07-12 12:39 | 空明流轉(zhuǎn)

            # re: C++ 字符串操作初析  回復(fù)  更多評(píng)論   

            推薦開(kāi)源c++ 庫(kù),http://pocoproject.org/,里面對(duì)std::string 進(jìn)行了一些擴(kuò)展,個(gè)人覺(jué)得不錯(cuò)
            2008-07-12 15:11 | lotus

            # re: C++ 字符串操作初析  回復(fù)  更多評(píng)論   

            有些很強(qiáng)大地string類(lèi)...
            2008-07-13 01:23 | 逍遙劍客

            # re: C++ 字符串操作初析  回復(fù)  更多評(píng)論   

            boost 有專(zhuān)門(mén)的字符串處理庫(kù)
            2008-07-13 15:38 | teli

            # re: C++ 字符串操作初析  回復(fù)  更多評(píng)論   

            這種方法我也寫(xiě)過(guò),博主寫(xiě)的不錯(cuò),現(xiàn)在我更感興趣的是string和wstring之間的直接轉(zhuǎn)換,呵呵,,不想用API來(lái)做,博主寫(xiě)一個(gè)??
            2008-07-14 08:26 | 紫夜蒼狼
            久久久久久九九99精品| 久久亚洲AV永久无码精品| 久久亚洲av无码精品浪潮| 狠狠色丁香婷婷久久综合不卡| 久久精品aⅴ无码中文字字幕不卡| 久久电影网| 久久青青国产| 久久精品国产清自在天天线| 亚洲国产成人久久综合一 | 精品久久久久久中文字幕人妻最新| 久久亚洲国产最新网站| 亚洲日本久久久午夜精品| 亚洲va久久久久| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 91精品国产高清久久久久久国产嫩草 | 久久97久久97精品免视看秋霞| 久久国产精品久久| 91精品国产91久久久久久青草| 狠狠色丁香久久综合婷婷| 丰满少妇人妻久久久久久4| 亚洲综合久久综合激情久久| 免费精品99久久国产综合精品| 94久久国产乱子伦精品免费 | 久久综合亚洲欧美成人| 久久99国产精品尤物| 久久综合狠狠色综合伊人| 久久国产美女免费观看精品| 久久人妻少妇嫩草AV无码蜜桃| 伊人久久大香线蕉综合网站| 亚洲va中文字幕无码久久| 1000部精品久久久久久久久| 久久se这里只有精品| 久久精品久久久久观看99水蜜桃| 久久国产精品一国产精品金尊| 伊人久久综在合线亚洲2019| 性高湖久久久久久久久AAAAA| 久久精品无码一区二区WWW| 老司机国内精品久久久久| 亚洲精品无码久久久| 精品国产乱码久久久久久1区2区| 国产精品久久久久久久午夜片|