01、CString类介绍
前言:串操作是编程中最常用也最基本的操作之一。 做为VC程序员,无论是菜鸟或高手都曾用过Cstring。而且好像实际编程中很难离得开它(虽然它不是标准C++中的库)。因为MFC中提供的这个类对我们操作字串实在太方便了,CString不仅提供各种丰富的操作函数、操作符重载,使我们使用起串起来更象basic中那样直观;而且它还提供了动态内存分配,使我们减少了多少字符串数组越界的隐患。但是,我们在使用过程中也体会到CString简直太容易出错了,而且有的不可捉摸。所以有许多高人站过来,建议抛弃它。
在此,我个人认为:CString封装得确实很完美,它有许多优点,如“容易使用 ,功能强,动态分配内存,大量进行拷贝时它很能节省内存资源并且执行效率高,与标准C完全兼容,同时支持多字节与宽字节,由于有异常机制所以使用它安全方便” 其实,使用过程中之所以容易出错,那是因为我们对它了解得还不够,特别是它的实现机制。因为我们中的大多数人,在工作中并不那么爱深入地去看关于它的文档,何况它还是英文的。
CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。这篇文章就来讨论这些技巧。
使用CString可以让你对字符串的操作更加直截了当。这篇文章不是CString的完全手册,但囊括了大部分常见基本问题。
02、常见函数表
看不懂没关系,下面都会举例描述,如有不明确的地方,评论区、或者私聊我,知道的一定尽力给你们说明白
| 函数名 | 描述 | 备注 |
|---|---|---|
| CString | CString类构造函数 | 略 |
| GetLength | 返回CString对象中的字符数 | 对于多字节字符,计算每个8位字符;也就是说,一个多字节字符中的一个前导字节和一个跟踪字节被计算为两个字符。 |
| IsEmpty | 测试CString对象是否不包含字符 | 为空,返回0;反之,返回非0 |
| Empty | 强制字符串具有0长度 | 强制清空字符串内容 |
| GetAt | 返回给定位置的字符 | 参数应避免负数,否则会出现意想不到的结果 |
| SetAt | 在给定的位置设置字符 | 当参数为负数或超出对象末尾时,会发生无法预料的结果 |
| Compare | 比较两个字符串 | 区分大小写 |
| CompareNoCase | 比较两个字符串 | 不区分大小写 |
| Collate | 比较两个字符串 | 区分大小写,使用特定于地区的信息 |
| CollateNoCase | 比较两个字符串 | 不区分大小写,使用特定于地区的信息 |
| Mid | 提取字符串的中间部分 | 此函数于我而言,多用于字符的匹配等功能 |
| Right | 提取字符串的右边部分 | Right函数一般来说用于CString的分段或者在正则表达式中叫字符分割 |
| Left | 提取字符串的左边部分 | 同上 |
| SpanIncluding | 提取仅包含集合中字符的子字符串 | 于我而言,上面三个已是足够 |
| SpanExcluding | 提取仅包含不包含在集合中的字符的子字符串 | 同上,相反的含义 |
| Find | 在母串中查找子串 | 母串:源字符串 子串:查找的字符串 次函数必须完全匹配子串才ok,不然返回 -1,找到则返回开始下标 |
| ReverseFind | 反向查找,同上 | 同上 |
| FindOneOf | 从集合中查找第一个匹配字符 | 此为非完全匹配,找到一个即停止查找(下面示例慢慢解释) |
| MakeUpper | 将此字符串中的所有字符转换为大写字符 | 有则转换,无则什么都不做,用于防呆 |
| MakeLower | 将此字符串中的所有字符转换为小写字符 | 同上 |
| MakeReverse | 顾名思义,翻转字符串,即从尾至头的一串新字符 | 熟悉数据结构就知道,此函数为逆转算法中的一部分 |
| Replace | 用其他字符替换指示字符 | 次函数在字符串操作时算是高频函数 |
| Remove | 从字符串中移除指示字符 | 返回值为移除的数目 |
| Insert | 在字符串中的给定索引处插入单个字符或子字符串 | 返回插入后对象的长度 |
| Delete | 从字符串中删除一个或多个字符 | 此处略 |
| Format | 格式化字符串 | 高频中的高频函数 |
| FormatV | 将字符串格式化为vsprintf | 我是很少使用次函数 |
| TrimLeft | 从字符串中修剪前导空格字符 | 前导空格:指变量或者常量值的有效内容前面的空格 |
| TrimRight | 从字符串中修剪尾随空格字符 | 略 |
| FormatMessage | 格式化消息字符串 | MFC通常用自带的消息框 |
| GetBuffer | 返回指向CString中字符的指针 | CString转string字符串时的中间转换函数 |
| ReleaseBuffer | 释放GetBuffer返回的缓冲区的控制 | 略 |
| LockBuffer | 禁用引用计数并保护缓冲区中的字符串 | 基本用不上,略 |
| UnlockBuffer | 启用引用计数,并释放缓冲区中的字符串 | 同上 |
| LoadString | 从Windows资源加载现有的CString对象 | 用于涉及到多国语言,需进行语言替换的时候,资源切换 |
03、CString类成员函数示例
3.1、CString(构造函数)
CString类所需头文件:#include <afx.h>,下面示例略,仅展示示例核心代码
//五种方法,以换行分割,请忽略变量名重名。
CString str; //最简单的无参构造
CString str("ABCDE"); //带内容的构造
CString buf(str); //类的拷贝构造
//buf输出:ABCDE
CString str("ABCDEFGH",3);
//str输出:ABC
CString str('a',5);
//str输出:aaaaa
wchar_t s[]=L"abcdef";
CString str(s);
//str输出:abcdef
/* 或许有人会问,你全用英文,那中文的呢? OK,他来了,请看*/
CString str = _T("我是小猪");
CString buf(str,4);
//buf输出: 我是 ~~~~~~为啥没有小猪,因为小猪被我吃了(开玩笑)
//因为:英文我们一般用1个字节就够了,但是中文字符,一个中文占2个字节,编译器不一样,或许也不一样,想知道你的是多少,可以用下面要说的GetLength方法查看
3.2、GetLength
CString str("AaBbCc");
CString buf = _T("你也是小猪");
//因为GetLength返回的是int类型,所以我们用int类型接收他的返回值
int nOneCharLen = str.GetLength(); //6
int nOneChinaesLen = buf.GetLength(); //10
/* 比如:我们现在想遍历一串字符串,该怎么做? 现有知识肯定已经是够了,如下 */
for(int i = 0; i < str.GetLength(); i++)
{
CString demo;
demo = str[i]; //是不是每一个字符都获取到了,想看就打印,想保存就存起来
}
3.3、IsEmpty
//测试对象是否为空,为空时返回零,不为空时返回非零
CString str(_T("C++ is a very good language!"));
CString buf;
if(buf.IsEmpty())
{
//非0进入
}
else {
//进入此节点
}
if(str.IsEmpty())
{
//进入此节点
}
else {
//为0才进入
}
3.4、Empty
//此函数的意思是将字符串中的内容强制清空,例如:
CString str = _T("No NULL");
int len = str.

本文详细介绍了MFC中的CString类,包括构造函数、常见函数及其用法示例。通过具体实例讲解了字符串操作技巧,如字符串比较、替换及格式化等。
最低0.47元/天 解锁文章
1万+





