CString和string.doc_第1页
CString和string.doc_第2页
CString和string.doc_第3页
CString和string.doc_第4页
CString和string.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CString,是ATL/MFC共享的, string是C+标准库的 相同点:(1)用他们都可以取代对char*的使用。(2)都封装了有丰富的字符串操作接口。(3)他们都是C+的类库。-以string的使用为例,不能有如下用法: string * pstr = NULL; /定义一个指向字符串的指针 pstr-append(Hello world.); /在该字符串的末尾粘接上另一个字符。这样做编译器不会有任何警告和错误,但是运行的时候就会有异常。原因是没有理解string是一个类,而在定义类的对象的时候是需要调用其构造函数的。上面既没有调用string的构造函数,而且还把指针赋值为NULL,很明显调用该类的对象的接口的时候会出错。但是编译器却发现不了这个问题的。正确的方法是如下:/*这里必须要用c+的宏new,而不能用c中的malloc,原因是new不但会分配一块内存,*/*还执行了类的构造函数。当然,string类的实例化还可以通过已有的某个string对象进行,请另查阅*/string * pstr = new string(Hello world.);pstr-append(Hello world.);coutstring * pstr is:*pstrendl;或者不用指针,如下也可以:string str; /会自动调用默认的构造函数,构造一个string类的对象。str.apend(Hello world.);coutstring str is:strc_str(); /并没有通过malloc或者new为指针ptmp分配内存,只是把string中的数据指针赋给了ptmp而已coutcstr is:ptmpcopy(p,pstr-length(),0); /如果没有上面分配内存空间,这个语句在运行时就会报段错误。coutchar * p:copy from string is:p CStringCString.format(”%s”, string.c_str();用c_str()确实比data()要好.2,char - stringstring s(char *);你的只能初始化,在不是初始化的地方最好还是用assign().3,CString - stringstring s(CString.GetBuffer();GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.C+标准函数库中说的有三个函数可以将字符串的内容转换为字符数组和Cstring1.data(),返回没有”0“的字符串数组2,c_str(),返回有”0“的字符串数组3,copy()CString与int、char*、char100之间的转换- -CString与int、char*、char100之间的转换- - CString互转int将字符转换为整数,可以使用atoi、_atoi64或atol。而将数字转换为CString变量,可以使用CString的Format函数。如CString s;int i = 64;s.Format(”%d”, i)Format函数的功能很强,值得你研究一下。void CStrDlg:OnButton1()/ TODO: Add your control notification handler code hereCStringss=”1212.12;int temp=atoi(ss);CString aa;aa.Format(”%d”,temp);AfxMessageBox(”var is ” + aa);sart.Format(”%s”,buf);CString互转char*/char * TO cstringCString strtest;char * charpoint;charpoint=”give string a value”;strtest=charpoint;/cstring TO char *charpoint=strtest.GetBuffer(strtest.GetLength();标准C里没有string,char *=char =string可以用CString.Format(”%s”,char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。CString转换 char100char a100;CString str(”aaaaaa”);strncpy(a,(LPCTSTR)str,sizeof(a);Trackback: /TrackBack.aspx?PostId=1570001 (一) 概述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) perator=string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;CString次之,可以直接用些基本的字符串赋值,包括char*等;char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针,令你抓狂;举例:char *psz = NULL;psz = new char10; /当然,以上的直接写成char *psz = new char10;也是一样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) operatorCString最好,当越界时会抛出断言异常;string与char*下标越界结果未定义;举例:char* psz = “joise”;CString cstr = psz;cout cstr8;string str = psz;cout str8;cout 、operator= 、perator=CString与string之间不可以进行比较,但均可以与char*进行比较,并且比较的是值,而不是地址;cout ( psz = cstr );cout ( psz = str );cout ( str = psz );cout ( cstr = psz );/以上代码返回均为1(四) 常用算法a) 查找作用 char* string CString查找指定值 strchrstrstrstrrstrstrspn find Find第一个匹配的值 fild_first_of FindOneOf 从后面开始查找 ReserveFind 指定匹配方式 find_if注:find_if中是把范围内的值挨个代入匹配函数直至返回trueb) 比较作用 char* string CString 查找指定值(区分大小写) strcmpstrncmpstrcoll_strncoll operatoroperator=operator=operator!= CollateCompare 查找指定值(不区分大小写) _stricmp_strnicmp_str违规广告_strn违规广告 CollateNoCaseCompareNoCas注:返回值如果CString string char*;(六) 灵活性CString string char*;(七) 可移植性char* = string Cstringcstring 转换成 floatCStrings;s=12345.6890;floatf=(float)atof(char*)(LPCTSTR)s);虽然不是我写的,但希望对你有帮助 #include using namespace std; #include CString strCString=ABC; char strchar256,*pstr; pstr=(LPSTR)(LPCTSTR)strCString; /CString-char* strcpy(strchar,(LPSTR)(LPCTSTR)strCString); /CString-char _bstr_t strbstr=pstr; /char*-_bstr_t WCHAR *strWCHAR=strbstr; /b_str_t-UNICODE strbstr=strWCHAR; pstr=strbstr; /UNICODE-char* strCString=10; int istr=atoi(LPSTR)(LPCTSTR)strCString); /CString、char、char*-int strCString.Format(%d,istr); /int-CString sprintf(strchar,%d,istr); /int-char pstr=new char256; /字符串申请空间 strcpy(pstr,ABC); /字符串赋值 delete pstr; /字符串释放 string strstring=ABC; pstr=(char*)strstring.c_str(); /string-char* strCString=2003-10-27 6:24:37; /CString-COleDateTime COleVariant vtime(strCString); vtime.ChangeType(VT_DATE); COleDateTime time4=vtime; COleDateTime time1(1977,4,16,2,2,2); /COleDataTime-CTime SYSTEMTIME systime; VariantTimeToSystemTime(time1, &systime); CTime tm(systime); time_t time2=tm.GetTime(); /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论