• <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>
            Impossible is nothing  
              愛過知情重醉過知酒濃   花開花謝終是空   緣份不停留像春風來又走   女人如花花似夢
            公告
            日歷
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567
            統計
            • 隨筆 - 8
            • 文章 - 91
            • 評論 - 16
            • 引用 - 0

            導航

            常用鏈接

            留言簿(4)

            隨筆分類(4)

            隨筆檔案(8)

            文章分類(77)

            文章檔案(91)

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             
            CString,string,char*的綜合比較


            (一) 概述

            string和CString均是字符串模板類,string為標準模板類(STL)定義的字符串類,已經納入C++標準之中;

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

            char*為C編程中最常用的字符串指針,一般以'\0'為結束標志;

            (二) 構造

            string是方便的,可以從幾乎所有的字符串構造而來,包括CString和char*;

            CString次之,可以從基本的一些字符串變量構造而來,包括char*等;

            char*沒有構造函數,僅可以賦值;

            舉例:

            char* psz = “joise”;

            CString cstr( psz );

            string str( cstr );

            (三) 運算符重載

            a) operator=

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

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

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

            舉例:

            char *psz = NULL;

            psz = new char[10]; //當然,以上的直接寫成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*進行加法,但不可以相互使用+運算符,即string str = str + cstr是非法的,須轉換成char*;

            char*沒有+運算,只能使用strcat把兩個指針連在一起;

            舉例:

            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 );//非法,由此可見,CString可自動轉換為const char*,而string不行

            c) operator +=

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

            CString次之,可以與基本的一些字符串變量進行+=而來,包括char*等;

            char*沒有+=運算符,只能使用strcat把兩個指針連在一起;

            d) operator[]

            CString最好,當越界時會拋出斷言異常;

            string與char*下標越界結果未定義;

            舉例:

            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之間不可以進行比較,但均可以與char*進行比較,并且比較的是值,而不是地址;

            cout << ( psz == cstr );

            cout << ( psz == str );

            cout << ( str == psz );

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

            (四) 常用算法

            a) 查找

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

            注:find_if中是把范圍內的值挨個代入匹配函數直至返回true

            b) 比較

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

            Compare 查找指定值(不區分大小寫) _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 動態增加值 strcat push

            append Append

            AppendChar

            AppendFormat


            f) 截取

            作用 char* string CString 得到部分值 用下標操作 substr Left

            Mid

            Right

            Truncate


            g) 移除

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

            注:此為ATL提供,非C函數 remove_if Trim

            TrimLeft

            TrimRig


            h) 轉換大小寫

            作用 char* string CString 轉換大小寫 _strlwr

            _strupr MakeLower

            MakeUpper


            i) 與其他類型轉換

            作用 char* string CString 轉化為數字 atoi

            atod

            atof Format 轉化為char* c_str
            GetBuffer

            GetBufferSetLen

            j) 格式化

            作用 char* string CString 格式化 sprintf Format


            k) 得到長度

            作用 char* string CString
            得到長度 strlen length GetLength 得到大小 size GetAllocLength

            l) 判斷為空

            作用 char* string CString 判斷是否為空 判斷是否==NULL或者第一個字符是否是'\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 2006-02-24 23:11 笑笑生 閱讀(1597) 評論(0)  編輯 收藏 引用 所屬分類: C++語言
             
            Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
            久久九九兔免费精品6| 亚洲精品国产第一综合99久久 | 四虎国产精品成人免费久久| 欧美日韩中文字幕久久久不卡| 一本一道久久综合狠狠老| A狠狠久久蜜臀婷色中文网| 久久久久亚洲精品无码网址| 综合人妻久久一区二区精品| Xx性欧美肥妇精品久久久久久| 日韩va亚洲va欧美va久久| 国产婷婷成人久久Av免费高清| 久久国产成人午夜AV影院| 久久国产高潮流白浆免费观看| 少妇被又大又粗又爽毛片久久黑人| 丁香五月网久久综合| 久久午夜无码鲁丝片秋霞| 久久久久久国产精品无码下载| 国内精品久久九九国产精品| 无码国内精品久久综合88| 久久免费99精品国产自在现线| 99久久综合狠狠综合久久| 高清免费久久午夜精品| 久久久久久国产精品无码超碰| 久久99精品久久久大学生| 人人妻久久人人澡人人爽人人精品| 国产成人无码精品久久久久免费 | 日韩精品久久无码人妻中文字幕| 久久精品亚洲男人的天堂| www亚洲欲色成人久久精品| 亚洲国产精品久久久久网站| 久久综合中文字幕| 久久香蕉一级毛片| 91久久国产视频| 久久久久18| 婷婷久久综合九色综合九七| 一本大道久久东京热无码AV| 人妻少妇精品久久| 午夜视频久久久久一区| 精品久久久久久国产| 久久国产亚洲精品无码| 久久伊人精品青青草原高清|