日日新 苟日新 导航 博客园首页新随笔联系聚合 管理 <2005年11月> 日一二三四五六303112345678910111213141516171819202122232425262728293012345678910 统计 随笔 - 288 文章 - 0 评论 - 434 引用 - 2 常用链接 我的随笔我的评论我参与的随笔 留言簿(65) 给我留言 查看公开留言 查看私人留言 随笔档案 2006年3月 (3) 2006年2月 (2) 2006年1月 (6) 2005年12月 (29) 2005年11月 (48) 2005年10月 (20) 2005年9月 (31) 2005年4月 (1) 2004年12月 (29) 2004年11月 (119) 相册 全身照 程序员脚印 程序员脚印 (rss)程序员宝库 <script language="javascript" type="text/javascript"> function searchgoogle(key,evt,site) { if(evt.keycode==13 || evt.keycode==0 || evt.type =='click') { key.focus(); var keystr = encodeuricomponent(key.value); url = "http://www.google.com/search?q="; url = url+keystr; url += "&ie=utf-8&oe=gb2312&hl=zh-cn&domains="+site+"&sitesearch="+site; window.location=url; return false; } } </script> 搜索 最新评论 1. re: 图像处理 评论内容较长,点击标题查看 --小刘 2. re: 图像处理 matlab实现水印提取的程序不知道楼主是否有这方面的资料 --changqing 3. re: 图像处理 我现在急需用MATLAB实现的水印图像提取的源程序如果你有这方面的资料能否给小弟一些不胜感激 我的邮箱是changqing1013@163.com --changqing 4. re: 图像处理 你好 ,刚快速浏览了你的文章,觉得对我们刚入门图像处理的人来说相当有用。希望阁下有时间能给我发一份源代码及系统。让我能从中得到更大的收益。 再次感谢你的大度! --小巩 5. re: 段掌 我也是个双手有段掌的女孩,.QQ148059084 --TINA 阅读排行榜 1. 图像处理(56446) 2. (转载)做个性感男人的开始之做个健康品位男人,为了自己,男人就是保护女人的,要不然要男人有什么用!?(26838) 3. Visual C++界面编程 (12636) 4. (摘抄)VC技术内幕笔记(12241) 5. VC/MFC Q&A 200409(6003) 评论排行榜 1. 图像处理(292) 2. 好的学习网站登记(30) 3. (摘抄)VC技术内幕笔记(12) 4. Visual C++界面编程 (12) 5. DES算法的介绍和实现(11) char* string CString比较总结 (一) 概述 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 2005-11-04 16:34 吴文力 阅读(784) 评论(1) 编辑 收藏 引用 网摘 Comments # re: char* string CString比较总结 yaoyao 谢谢,正用到呢 Posted @ 2005-11-20 04:56 回复 更多评论 刷新评论列表 width="468" scrolling="no" height="60" frameborder="0" allowtransparency="true" hspace="0" vspace="0" marginheight="0" marginwidth="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4210569241504288&dt=1178850352346&lmt=1178850319&format=468x60_as&output=html&url=http%3A%2F%2Fwiseman.cnblogs.com%2Farchive%2F2005%2F11%2F04%2F268973.html&color_link=6699CC&ad_type=text&cc=14&flash=9&u_h=1024&u_w=1280&u_ah=957&u_aw=1280&u_cd=32&u_tz=480&u_his=1&u_java=true&u_nplug=27&u_nmime=148" name="google_ads_frame"> 标题请输入标题姓名请输入你的姓名主页 请输入验证码 验证码* 内容(请不要发表任何与政治相关的内容) 请输入评论内容 Remember Me? 登录 使用高级评论 新用户注册 返回页首 恢复上次提交 [使用Ctrl+Enter键可以直接提交] width="468" scrolling="no" height="80" frameborder="0" allowtransparency="true" style="border: 0px solid rgb(102, 102, 102);" src="http://www.cnblogs.com/ad.htm" marginwidth="0" marginheight="0">