VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 2145|回复: 35

《实用VC编程之玩转字符串》第4课:CString的方便之处及优缺点

[复制链接]
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-12-16 00:52:51 | 显示全部楼层 |阅读模式
1、CString简介:
提起CString,相信接触过MFC编程开发的小伙伴都不陌生,相反很熟悉。MFC中对于CString字符串的使用可以说是很频繁的,CString类也可以说是MFC中针对字符串的一个封装类。其实CString归属于ATL,不过在MFC中一样使用,而且被重点使用。

2、CString类的方便之处:
在 C语言中,对于字符串的操作有字符串数组,字符串指针之类的,比如:
char* p_str = "hello";
char szbuf[100] = {'h', 'e', 'l', 'l', 'o'};
再对字符串进行拷贝、连接、比较 的时候也要借助 strcpy、strcat、strcmp 之类的函数,而且还要考虑目标空间是否够用之列的,很是麻烦,一旦操作不好就会导致数组越界了,造成缓冲区溢出。

有的网友会说了,C语言的字符串处理确实比较麻烦,但是我可以使用C++ STL 中的 string 啊,这样要比C语言的方便很多吧,比如:
string str = "hello";
str += " world.";
bool is_equal = (str == "123");
这样就不用担心字符串空间是否够用,连接、比较什么的也十分方便,直接 += 或者 == 就可以判断出来了。其实 C++ STL 中的 string 还提供了很多其他的算法,例如:
http://www.cplusplus.com/reference/string/string/

虽然 C++ STL 中的 string 照比C语言中的字符串处理方便很多,但是这里我要说,跟成熟的字符串处理还是差很多,起码跟 CString来说就差了不少。比如:
trim 操作:去除掉首尾的不可见字符,比如回车,制表符,空格之类的;
reverse 操作:进行字符串的首尾颠倒反转;
upper操作:将字符串中的英文全变成大写字母;
lower操作:将字符串中的英文全变成小写字母;
right操作:直接返回字符串中结尾的指定字符;
span_including操作:返回包含指定字符串中任意一个字符的子串
span_excluding操作:返回不包含指定字符串中任意一个字符的子串
format:格式化字符串
replace:替换字符串中的指定字符
stricmp:不区分大小写进行字符串比较

等等吧,这些都没有现成的函数,不可能类似这样简单的操作:
string str = "hello";
str.upper();
直接将字符串变成大写字母的。实际是做不到的,即使能做到也需要好几行代码。但是以上这些操作在 CString 中就相对简单了。可以很轻松的做到,CString早就封装好了这些常用的操作。
例如:
CString str;


3、CString 对于 TCHAR 的封装:
针对当前编码,决定当前内部的指针是 char* 还是 wchar_t*,实际上CString 本身是个模板类,实际上有三种:
  1. typedef ATL::CStringT< wchar_t, StrTraitMFC< wchar_t > > CStringW;
  2. typedef ATL::CStringT< char, StrTraitMFC< char > > CStringA;
  3. typedef ATL::CStringT< TCHAR, StrTraitMFC< TCHAR > > CString;
复制代码

CStringA 内部使用的是 char*,CStringW 内部使用的是 wchar_t*,CString内部使用的是 TCHAR*,所以 CString 本身会根据当前工程的编码决定使用 char* 还是 wchar_t*,这一点也比较方便。
我们可以先简单使用下 CString,之后改变下工程的编码,看看编译结果就知道了。

4、CString 类对于宽窄字节的转换:
当前工程编码是宽字节Unicode的前提下,CString支持从char* 类型的窄字节字符串来构造和赋值。所以,是可以方便的从窄字节转换到宽字节。但是反之则没有办法实现。

5、使用 CString 类的优缺点:
先来说说优点:
①、使用方便,包含了很多实现好的操作,包括:trim、reverse、format、replace 等等;
②、无缝兼容MFC;
③、自适应当前工程编码,匹配宽窄字节;
④、能实现从窄字节到宽字节的自动转换工作;

再来说说缺点:
①、在非MFC的工程中无法使用,例如:控制台类型的工程,或者Win32类型的API项目;
②、无法完全实现宽窄字节的任意转换;
③、非C++标准,无法跨平台,在除了VC以外的编译器无法使用,更无法在Linux等其他平台上使用。

6、解决方案:

扩展 C++ 标准模板库 STL 中的 string 字符串,使其既方便使用,又可以自由的转换宽窄字节,接下来的课程给大家讲解!

备注:相关课程细节及演示详见视频教程!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av38413272/?p=4
MP4高清视频下载地址:链接:https://pan.baidu.com/s/1rQU1EGyFc9soGuuDku3qbA 提取码:u6cy
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^




上一篇:《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换
下一篇:《实用VC编程之玩转字符串》第5课:扩展C++STL中的string方便使用
81_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-16 09:59:12 | 显示全部楼层
感谢楼主的经验分享。。。。《实用VC编程之玩转字符串》第4课:CString的方便之处及优缺点
08_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-16 10:49:04 | 显示全部楼层
感谢楼主的经验分享
12_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-16 10:57:33 | 显示全部楼层
当前工程编码是宽字节Unicode的前提下,CString支持从char* 类型的窄字节字符串来构造和赋值。所以,是可以方便的从窄字节转换到宽字节。但是反之则没有办法实现。
87_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-16 12:59:43 | 显示全部楼层
谢谢老大分享!
32_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-16 20:10:46 | 显示全部楼层
感谢楼主的经验分享
69_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-16 20:19:28 | 显示全部楼层
《实用VC编程之玩转字符串》第4课:CString的方便之处及优缺点谢谢楼主分享
10_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-17 16:24:53 | 显示全部楼层
继续哈,支持老大出品
04_avatar_middle
最佳答案
0 
online_vip 发表于 2018-12-19 21:38:07 | 显示全部楼层
比较好,认真,辛苦了
78_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-20 08:40:02 | 显示全部楼层
感谢楼主的经验分享
95_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-21 08:37:00 | 显示全部楼层
感谢老大分享的精彩课程
21_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-22 11:28:28 | 显示全部楼层
之前对于CString一直没有详细了解过,感谢老大制作的教程。
87_avatar_middle
最佳答案
0 
online_vip 发表于 2018-12-24 11:17:52 | 显示全部楼层
但是我可以使用C++ STL 中的 string 啊,这样要比C语言的方便很多吧,比如
38_avatar_middle
最佳答案
0 
online_vip 发表于 2018-12-24 12:38:39 | 显示全部楼层
顶顶顶顶顶顶顶《实用VC编程之玩转字符串》第4课:CString的方便之处及优缺点
01_avatar_middle
最佳答案
0 
online_vip 发表于 2018-12-29 10:27:55 | 显示全部楼层
老大出品,必属精品
49_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-31 09:57:09 | 显示全部楼层
学习学习............
16_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-31 11:50:04 | 显示全部楼层
速度来学习了,多谢
22_avatar_middle
最佳答案
0 
在线会员 发表于 2018-12-31 20:39:11 | 显示全部楼层
《实用VC编程之玩转字符串》第4课:CString的方便之处及优缺点《实用VC编程之玩转字符串》第4课:CString的方便之处及优缺点《实用VC编程之玩转字符串》第4课:CString的方便之处及优缺点
61_avatar_middle
最佳答案
0 
在线会员 发表于 2019-1-2 01:35:47 | 显示全部楼层
感谢楼主的经验分享。。
89_avatar_middle
最佳答案
0 
在线会员 发表于 2019-1-15 19:15:12 | 显示全部楼层
看下示例代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-11-15 19:30

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表