CString(MFC)

如果用MFC开发图形界面,那么跟CString打交道则是必不可少的一件事情。因此熟练运用CString则显得尤为必要。

MFC CString

CString/CStringA/CStringW

CString、CStringA和CStringW,它们分别提供对TCHAR、char和wchar_t字符类型的字符串的操作。char类型定义的是Ansi字符,wchar_t类型定义的是Unicode字符,而TCHAR取决于MFC工程的属性对话框中的Configuration Properties->General->Character Set属性,如果此属性为Use Multi-Byte Character Set,则TCHAR类型定义的是Ansi字符,而如果为Use Unicode Character Set,则TCHAR类型定义的是Unicode字符。

构造函数

CString(const CString& stringSrc);//定义与拷贝
CString(LPCTSTR lpch, int nLength);// 将字符串lpch中的前nLength个字符拷贝到该CString对象。
CString(TCHAR ch, int nLength = 1);//使用此函数构造的CString对象中将含有nLength个重复的ch字符。

示例:

CString str1(_T"zdy");//定义CString
CString str2(str1);//拷贝str1到str2
CString str(_T("zhangdanyang"),3);//str为字符串zhangdanyang的前3个字符"zha"

大小写转换以及顺序转换

CString& MakeLower();//将字符串中的所有大写字符转换为小写字符。
CString& MakeUpper();//将字符串中的所有小写字符转换为大写字符。
CString& MakeReverse();//将字符串中所有字符的顺序颠倒。

示例:

CString str(_T("Zdy"));   
str.MakeLower();   // str为"zdy"   
str.MakeUpper();   // str为"ZDY"   
str.MakeReverse(); // str为"YDZ" 

对象连接

多个CString对象的连接可以通过重载运算符+、+=实现。

示例:

String str(_T("zhangdanyang"));      // str内容为"zhangdanyang"   
str = _T("www.") + str + _T("."); // str为"www.zhangdanyang."   
str += _T("com");                 // str为"www.zhangdanyang.com"  

CString对象的比较

CString对象的比较可以通过==、!=、<、>、<=、>=等重载运算符实现,也可以使用Compare和CompareNoCase成员函数实现。

int Compare(PCXSTR psz) const;

将该CString对象与psz字符串比较,如果相等则返回0,如果小于psz则返回值小于0,如果大于psz则返回值大于0。

int CompareNoCase(PCXSTR psz) const throw();

此函数与Compare功能类似,只是不区分大小写。

示例:

CString str1 = _T("ZhangDanYang");   
CString str2 = _T("zhangdanyang");   
if (str1 == str2)   
{   
     // 因为str1、str2不相等,所以不执行下面的代码   
     ...   
}   
if (0 == str1.CompareNoCase(str2))   
{   
     // 因为不区分大小写比较时,CompareNoCase函数返回0,所以执行下面的代码   
     ...   
}  

对象字符串的提取操作

CString Left(int nCount) const;

提取该字符串左边nCount个字符的子字符串,并返回一个包含这个子字符串的拷贝的CString对象。

CString Right(int nCount) const;

提取该字符串右边nCount个字符的子字符串,并返回一个包含这个子字符串的拷贝的CString对象。

CString Mid(int iFirst,int nCount) const;

提取该字符串中以索引iFirst位置开始的nCount个字符组成的子字符串,并返回一个包含这个子字符串的拷贝的CString对象。

CString Mid(int iFirst) const;

提取该字符串中以索引iFirst位置开始直至字符串结尾的子字符串,并返回一个包含这个子字符串的拷贝的CString对象。

示例:

CString str1 = _T("zhangdanyang");   
CString str2 = str1.Left(3);    // str2为"zha"   
str2 = str1.Right(2);           // str2为"ng"   
str2 = str1.Mid(1,3);           // str2为"han"   
str2 = str1.Mid(5);             // str2为"danyang" 

对象字符串的查找操作

int Find(PCXSTR pszSub,int iStart=0) const throw( );
int Find(XCHAR ch,int iStart=0) const throw( );

在CString对象字符串的iStart索引位置开始,查找子字符串pszSub或字符ch第一次出现的位置,如果没有找到则返回-1。

int FindOneOf(PCXSTR pszCharSet) const throw( );

查找pszCharSet字符串中的任意字符,返回第一次出现的位置,找不到则返回-1。

int ReverseFind(XCHAR ch) const throw();

从字符串末尾开始查找指定的字符ch,返回其位置,找不到则返回-1。这里要注意,尽管是从后向前查找,但是位置的索引还是要从开始算起。

示例:

CString str = _T("zhangdanyang");   
int nIndex1 = str.Find(_T("an"));   // nIndex1的值为2
int nIndex2 = str.FindOneOf(_T("ydz")); // nIndex2的值为0   
int nIndex3 = str.ReverseFind(_T('y'));  // nIndex3的值为8  

对象字符串的替换与删除

int Replace(PCXSTR pszOld,PCXSTR pszNew);

用字符串pszNew替换CString对象中的子字符串pszOld,返回替换的字符个数。

int Replace(XCHAR chOld,XCHAR chNew);

用字符chNew替换CString对象中的字符chOld,返回替换的字符个数。

int Delete(int iIndex,int nCount = 1);

从字符串中删除iIndex位置开始的nCount个字符,返回删除操作后的字符串的长度。

int Remove(XCHAR chRemove);

删除字符串中的所有由chRemove指定的字符,返回删除的字符个数。

示例:

CString str = _T("zhangdanyang");   
int n1 = str.Replace(_T('a'), _T('b'));  // str为"zhbngdbnybng",n1为3  
int n2 = str.Delete(1,5);        // str为"zbnybng",n2为7 
int n3 = str.Remove(_T('b'));    // str为"znyng",n3为2     

格式化字符串

使用CString类的Format成员函数可以将int、short、long、float、double等数据类型格式化为字符串对象。

void __cdecl Format(PCXSTR pszFormat,[, argument]...);

参数pszFormat为格式控制字符串;参数argument可选,为要格式化的数据,一般每个argument在pszFormat中都有对应的表示其类型的子字符串,int型的argument对应的应该是"%d",float型的应对应"%f",等等。

示例:

CString str;   
int a = 1;   
float b = 2.3f;   
str.Format(_T("a=%d,b=%f"), a, b);  // str为"a=1,b=2.300000"  

本块内容参考鸡啄米:VS2010/MFC编程入门之四十二(MFC常用类:CString类)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 现在我们吃晚饭, 香甜可口又清淡。 玉米稀粥来一碗, ...
    Jolin08阅读 491评论 0 0
  • 从校园生活到职场生活的转变是非常困难的,面临着各方面的问题,就业的压力,工作去向的选择,薪资的预期效果没有想象中的...
    底细L阅读 444评论 0 0