卓一思(Joise.LI)的专栏

仰无愧于天,俯无怍于地

卓一思ID:joise
22905次访问,排名4961好友0人,关注者0
joise的文章
原创 8 篇
翻译 2 篇
转载 6 篇
评论 17 篇
卓一思的公告
卓是特立
一是简单
思是睿智

山人不甚魁梧,性善,喜游戏,尢喜星际令对方剩一农民而后虐之也。天下男子不能尽以为友实为此生憾事,憾哉,憾哉!

最近评论
mohroq:wow gold,
angelzhuji:这两天再做课程设计。。
字符串的,学的不好,很是郁闷。。
在网上学习高手的。

看了一会你写的Cstring
又看到一篇这样的感情文章。。
好感人的。

爱一个人就要一辈子结她好!~~

呵呵,有程序问题了,请教你的!~~~
爱情问题有时间也问问的。。
wangyoucao2003:您好!我是个VC的初学者,想请教您一个问题。CString是否有长度限制?为什么我用GetLength成员函数获取长度时不能获取真实的长度,取得的值小于应该的长度?谢谢
Youth:好贴,转一个到开发者论坛
joise:唉,好久没上自己的BLOG了,再看以前自己写的这些乱七八糟的东西,简直有一种愧对网友的感觉,错误百出,真是对不起大家了

回头有空再作修正!!!
文章分类
收藏
    相册
    Her
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 CString,string,char*的综合比较(一)收藏

    新一篇: 61条面向对象设计的经验原则(转贴) | 旧一篇: CString,string,char*的综合比较(二)

    (一)  概述

    stringCString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;

    CStringtypedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFCATL编程中,主要数据类型有char(应用于ANSI)wchar_t(unicode)TCHAR(ANSIunicode均可)

    char*C编程中最常用的字符串指针,一般以’\0’为结束标志;

    (二)  构造

    ²        string是方便的,可以从几乎所有的字符串构造而来,包括CStringchar*

    ²        CString次之,可以从基本的一些字符串变量构造而来,包括char*等;

    ²        char*没有构造函数,仅可以赋值;

    ²        举例:

    char* psz = “joise”;

    CString cstr( psz );

    string str( cstr );

    (三)  运算符重载

    a)       operator=

    ²        string是最方便的,几乎可以直接用所有的字符串赋值,包括CStringchar*

    ²        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+

    ²        stringCString差不多,可以直接与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是最强大的,几乎可以与所有的字符串变量+=,包括CStringchar*

    ²        CString次之,可以与基本的一些字符串变量进行+=而来,包括char*等;

    ²        char*没有+=运算符,只能使用strcat把两个指针连在一起;

    d)      operator[]

    ²    CString最好,当越界时会抛出断言异常;

    ²    stringchar*下标越界结果未定义;

    ²        举例:

    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<=

    ²        CStringstring之间不可以进行比较,但均可以与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

    CompareNoCase

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

    c)      替换

    作用

    char*

    string

    CString

    查找指定值

    _strset

    _strnset

    replace

    replace_copy

    replace_copy_if

    replace_if

     

    Replace

    d)      插入

    作用

    char*

    string

    CString

    查找指定值

     

    insert

    Insert

     

    下一篇

    Joise.LI

    joise@126.com

    http://joise.126.com

    发表于 @ 2004年04月20日 23:17:00|评论(loading...)|编辑

    新一篇: 61条面向对象设计的经验原则(转贴) | 旧一篇: CString,string,char*的综合比较(二)

    评论

    #tongko 发表于2005-02-14 01:43:00  IP:
    TrackBack来自《CString,string,char*的综合比较(一) 》

    Ping Back来自:blog.csdn.net
    #东东 发表于2004-11-18 16:14:00  IP: 218.85.59.*
    呵呵,好文章,找好久了,弄这么清楚,有茅塞顿开的感觉,
    #yuanzhenhua 发表于2005-04-18 13:36:00  IP: 221.237.177.*
    辛苦了 顶一个
    #ll 发表于2006-06-06 22:14:00  IP: 192.168.0.*
    <hr><>
    #joise 发表于2006-06-28 10:24:00  IP: 219.133.51.*
    唉,好久没上自己的BLOG了,再看以前自己写的这些乱七八糟的东西,简直有一种愧对网友的感觉,错误百出,真是对不起大家了

    回头有空再作修正!!!
    #wangyoucao2003 发表于2007-04-17 16:54:11  IP: 222.209.143.*
    您好!我是个VC的初学者,想请教您一个问题。CString是否有长度限制?为什么我用GetLength成员函数获取长度时不能获取真实的长度,取得的值小于应该的长度?谢谢
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 卓一思