• <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>
            隨筆-250  評(píng)論-20  文章-55  trackbacks-0

            (一) 概述

            string和CString均是字符串模板類(lèi),string為標(biāo)準(zhǔn)模板類(lèi)(STL)定義的字符串類(lèi),已經(jīng)納入C++標(biāo)準(zhǔn)之中;

            CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)為Visual C++中最常用的字符串類(lèi),繼承自CSimpleStringT類(lèi),主要應(yīng)用在MFC和ATL編程中,主要數(shù)據(jù)類(lèi)型有char(應(yīng)用于ANSI),wchar_t(unicode),TCHAR(ANSI與unicode均可);

            char*為C編程中最常用的字符串指針,一般以’\0’為結(jié)束標(biāo)志;

            (二) 構(gòu)造

             string是方便的,可以從幾乎所有的字符串構(gòu)造而來(lái),包括CString和char*;

             CString次之,可以從基本的一些字符串變量構(gòu)造而來(lái),包括char*等;

             char*沒(méi)有構(gòu)造函數(shù),僅可以賦值;

             舉例:

            char* psz = “joise”;

            CString cstr( psz );

            string str( cstr );

            (三) 運(yùn)算符重載

            a) operator=

             string是最方便的,幾乎可以直接用所有的字符串賦值,包括CString和char*;

             CString次之,可以直接用些基本的字符串賦值,包括char*等;

             char*只能由指針賦值,并且是極危險(xiǎn)的操作,建議使用strcpy或者memcpy,而且char*在聲明的時(shí)候如未賦初值建議先設(shè)為NULL,以避免野指針,令你抓狂;

             舉例:

            char *psz = NULL;

            psz = new char[10]; //當(dāng)然,以上的直接寫(xiě)成char *psz = new char[10];也是一樣

            memset( psz, 0, 10 );

            strcpy( psz, “joise” ); 

            CString cstr;

            cstr = psz;

            string str;

            str = psz;

            str = cstr;

            delete []psz;

            b) operator+

            string與CString差不多,可以直接與char*進(jìn)行加法,但不可以相互使用+運(yùn)算符,即string str = str + cstr是非法的,須轉(zhuǎn)換成char*;

            char*沒(méi)有+運(yùn)算,只能使用strcat把兩個(gè)指針連在一起;

             舉例:

            char* psz = “joise”;

            CString cstr = psz;

            cstr = cstr + psz;

            string str = psz;

            str = str + str + psz;

            strcat( psz, psz );

            strcat( psz, cstr );//合法

            strcat( psz, str );//非法,由此可見(jiàn),CString可自動(dòng)轉(zhuǎn)換為const char*,而string不行

            c) operator +=

             string是最強(qiáng)大的,幾乎可以與所有的字符串變量+=,包括CString和char*;

             CString次之,可以與基本的一些字符串變量進(jìn)行+=而來(lái),包括char*等;

            char*沒(méi)有+=運(yùn)算符,只能使用strcat把兩個(gè)指針連在一起;

            d) operator[]

             CString最好,當(dāng)越界時(shí)會(huì)拋出斷言異常;

             string與char*下標(biāo)越界結(jié)果未定義;

            舉例:

            char* psz = “joise”;

            CString cstr = psz;

            cout << cstr[8];

            string str = psz;

            cout << str[8];

            cout << psz[8];

            e) operator== 、operator!=、operator> 、operator< 、operator>= 、perator<=

             CString與string之間不可以進(jìn)行比較,但均可以與char*進(jìn)行比較,并且比較的是值,而不是地址;

            cout << ( psz == cstr );

            cout << ( psz == str );

            cout << ( str == psz );

            cout << ( cstr == psz );//以上代碼返回均為1

            (四) 常用算法

            a) 查找

            作用 char* string CString
            查找指定值 strchr
            strstr
            strrstr
            strspn
            find Find
            第一個(gè)匹配的值   fild_first_of FindOneOf
            從后面開(kāi)始查找     ReserveFind
            指定匹配方式   find_if  

            注:find_if中是把范圍內(nèi)的值挨個(gè)代入匹配函數(shù)直至返回true

            b) 比較

            作用 char* string CString
            查找指定值(區(qū)分大小寫(xiě)) strcmp
            strncmp
            strcoll
            _strncoll
            operator<
            operator>
            operator<= 
            operator>=
            operator==
            operator!=
            Collate

            Compare
            查找指定值(不區(qū)分大小寫(xiě)) _stricmp
            _strnicmp
            _stricoll
            _strnicoll
              CollateNoCase

            CompareNoCas

            注:返回值如果<0則前面的值小于后面的值,反之亦然

            c) 替換

            作用 char* string CString
            查找指定值 _strset
            _strnset
            replace
            replace_copy
            replace_copy_if
            replace_if
            Replace

            d) 插入

            作用 char* string CString
            查找指定值   insert Insert

            e) 增加
            作用 char* string CString
            動(dòng)態(tài)增加值 strcat push

            append
            Append

            AppendChar

            AppendFormat


            f) 截取

            作用 char* string CString
            得到部分值 用下標(biāo)操作 substr Left

            Mid

            Right

            Truncate


            g) 移除

            作用 char* string CString
            移除部份值   remove Remove
            移除空白值 RemoveBlanks

            注:此為ATL提供,非C函數(shù)
            remove_if Trim

            TrimLeft

            TrimRig


            h) 轉(zhuǎn)換大小寫(xiě)

            作用 char* string CString
            轉(zhuǎn)換大小寫(xiě) _strlwr

            _strupr
              MakeLower

            MakeUpper


            i) 與其他類(lèi)型轉(zhuǎn)換

            作用 char* string CString
            轉(zhuǎn)化為數(shù)字 atoi

            atod

            atof
              Format
            轉(zhuǎn)化為char*   c_str
            GetBuffer

            GetBufferSetLen

            j) 格式化

            作用 char* string CString
            格式化 sprintf   Format


            k) 得到長(zhǎng)度

            作用 char* string CString
            得到長(zhǎng)度 strlen length GetLength
            得到大小   size GetAllocLength

            l) 判斷為空

            作用 char* string CString
            判斷是否為空 判斷是否==NULL或者第一個(gè)字符是否是’\0’ empty IsEmpty

            m) 重定義大小

            作用 char* string CString
            重定義大小 realloc
            new
            resize GetBufferSetLength

            n) 釋放資源

            作用 char* string CString
            釋放 free

            delete (delete[])
              ReleaseBuffer

            ReleaseBufferSetLength

            (五) 安全性>

            CString > string > char*;

            (六) 靈活性

            CString > string >char*;

            (七) 可移植性

            char* = string > CString

            posted on 2007-06-13 16:13 jay 閱讀(919) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): C++

            評(píng)論:
            # re: CString,string,char*的綜合比較 2012-02-03 18:23 | Morph
            好詳細(xì)~~  回復(fù)  更多評(píng)論
              
            久久久精品日本一区二区三区 | 久久青青草原精品国产软件| 午夜不卡888久久| 久久久久97国产精华液好用吗| 精品久久综合1区2区3区激情| 久久久久久国产a免费观看黄色大片| 国产成人香蕉久久久久| 伊人久久大香线蕉av不卡| 伊人久久大香线蕉精品| 久久久久久久久久久久中文字幕 | 精产国品久久一二三产区区别| 奇米影视7777久久精品人人爽| 狠狠综合久久AV一区二区三区| 久久久久久久综合日本亚洲 | 国产亚洲精午夜久久久久久| 久久水蜜桃亚洲av无码精品麻豆| 久久超碰97人人做人人爱| 亚洲国产天堂久久久久久| 欧美精品九九99久久在观看| 亚洲伊人久久成综合人影院| 一本一道久久精品综合| 久久久九九有精品国产| 2021少妇久久久久久久久久| 午夜精品久久久久久99热| 成人久久免费网站| 久久亚洲中文字幕精品有坂深雪 | 久久久精品久久久久特色影视| 国产99久久久久久免费看| 久久人妻少妇嫩草AV蜜桃| 久久综合久久综合亚洲| 无码人妻久久久一区二区三区 | 伊人久久一区二区三区无码| 人妻无码久久精品| 久久亚洲欧美国产精品| 国产免费久久久久久无码| 久久亚洲精品国产亚洲老地址| 久久午夜伦鲁片免费无码| 99久久精品国产综合一区| 精品综合久久久久久98| 色综合久久久久综合99| 久久99国产亚洲高清观看首页 |