欢迎来到天天文库
浏览记录
ID:39468502
大小:59.00 KB
页数:11页
时间:2019-07-04
《string和CString》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、(一)概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedefCStringT>CString)为VisualC++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);char*为C编程中最常用的字符串指针,一般以’ ’为结束标志;(二)构造²string是方便的,可以从几乎所有的
2、字符串构造而来,包括CString和char*;²CString次之,可以从基本的一些字符串变量构造而来,包括char*等;²char*没有构造函数,仅可以赋值;²举例:char*psz=“joise”;CStringcstr(psz);stringstr(cstr);(三)运算符重载a)operator=²string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;²CString次之,可以直接用些基本的字符串赋值,包括char*等;²char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值
3、建议先设为NULL,以避免野指针,令你抓狂;²举例:char*psz=NULL;psz=newchar[10];//当然,以上的直接写成char*psz=newchar[10];也是一样memset(psz,0,10);strcpy(psz,“joise”);CStringcstr;cstr=psz;stringstr;str=psz;str=cstr;delete[]psz;b)operator+²string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即stringstr=str+cstr是非法的,须转换成char*;²char*没有+运算,只
4、能使用strcat把两个指针连在一起;²举例:char*psz=“joise”;CStringcstr=psz;cstr=cstr+psz;stringstr=psz;str=str+str+psz;strcat(psz,psz);strcat(psz,cstr);//合法strcat(psz,str);//非法,由此可见,CString可自动转换为constchar*,而string不行c)operator+=²string是最强大的,几乎可以与所有的字符串变量+=,包括CString和char*;²CString次之,可以与基本的一些字符串变量进行+=而来,包括char*等;²c
5、har*没有+=运算符,只能使用strcat把两个指针连在一起;d)operator[]²CString最好,当越界时会抛出断言异常;²string与char*下标越界结果未定义;²举例:char*psz=“joise”;CStringcstr=psz;cout<、operator<、operator>=、perator<=²CString与string之间不可以进行比较,但均可以与char*进行比较,并且比较的是值,而不
6、是地址;cout<<(psz==cstr);cout<<(psz==str);cout<<(str==psz);cout<<(cstr==psz);//以上代码返回均为1(四)常用算法a)查找作用char*stringCString查找指定值strchrstrstrstrrstrstrspnfindFind第一个匹配的值fild_first_ofFindOneOf从后面开始查找ReserveFind指定匹配方式find_if注:find_if中是把范围内的值挨个代入匹配函数直至返回trueb)比较作用char*stringCString查找指定值(区分大小写)strcmpstrncm
7、pstrcoll_strncolloperatoroperator<=operator>=operator==operator!=CollateCompare查找指定值(不区分大小写)_stricmp_strnicmp_stricoll_strnicollCollateNoCaseCompareNoCase注:返回值如果<0则前面的值小于后面的值,反之亦然c)替换作用char*stringCString查找指定值_strset_strn
此文档下载收益归作者所有