VS2010-MFC(MFC常用类:CString类)

转自:http://www.jizhuomi.com/software/228.html

CString类简介

CString类作为MFC的常用类,当之无愧。可以这样说,只要是从事MFC开发,基本都会遇到使用CString类的场合。因为字符串的使用比较普遍,而CString类又提供了对字符串的便捷操作,所以它给MFC开发人员带来了高的开发效率,受到了开发者的欢迎。

大家使用VS2010的话,可能会见到CStringT,实际上它是一个操作可变长度字符串的模板类。CStringT模板类有三个实例: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类为讲解对象。

CString类的字符串操作

1. CString类的构造函数

CString类有很多构造函数,这里只介绍几个比较常用的:

CString(const CString& stringSrc);

将一个已经存在的CString对象stringSrc的内容拷贝到该CString对象。例如:

C++代码

CString str1(_T("www.jizhuomi.com"));  // 将常量字符串拷贝到str1     
CString str2(str1);      // 将str1的内容拷贝到str2 

CString(LPCTSTR lpch, int nLength);

将字符串lpch中的前nLength个字符拷贝到该CString对象。例如:

C++代码

CString str(_T("www.jizhuomi.com"),3); // 构造的字符串对象内容为"www"

CString(TCHAR ch, int nLength = 1);

使用此函数构造的CString对象中将含有nLength个重复的ch字符。例如:

C++代码

CString str(_T(‘w‘),3); // str为"www"

2. CString类的大小写转换及顺序转换函数

CString& MakeLower();

将字符串中的所有大写字符转换为小写字符。

CString& MakeUpper();

将字符串中的所有小写字符转换为大写字符。

CString& MakeReverse();

将字符串中所有字符的顺序颠倒。

例如:

C++代码

CString str(_T("JiZhuoMi"));
str.MakeLower();   // str为"jizhuomi"
str.MakeUpper();   // str为"JIZHUOMI"
str.MakeReverse(); // str为"IMOUHZIJ"  

3. CString对象的连接

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

C++代码

CString str(_T("jizhuomi"));      // str内容为"jizhuomi"
str = _T("www.") + str + _T("."); // str为"www.jizhuomi."
str += _T("com");                 // str为"www.jizhuomi.com"

 4. CString对象的比较

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

 int Compare(PCXSTR psz) const;

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

int CompareNoCase(PCXSTR psz) const throw();

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

例如:

C++代码

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

5. CString对象字符串的提取操作

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对象。

例如:

C++代码

CString str1 = _T("jizhuomi");
CString str2 = str1.Left(3);    // str2为"jiz"
str2 = str1.Right(2);           // str2为"mi"
str2 = str1.Mid(1,3);           // str2为"izh"
str2 = str1.Mid(5);             // str2为"omi"  

6. CString对象字符串的查找操作

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。这里要注意,尽管是从后向前查找,但是位置的索引还是要从开始算起。

C++代码

CString str = _T("jizhuomi");
int nIndex1 = str.Find(_T("zh"));   // nIndex1的值为2
int nIndex2 = str.FindOneOf(_T("mui")); // nIndex2的值为1
int nIndex3 = str.ReverseFind(_T(‘i‘));  // nIndex3的值为7 

7. CString类对象字符串的替换与删除

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指定的字符,返回删除的字符个数。

例如:

C++代码

CString str = _T("jizhuomi");
int n1 = str.Replace(_T(‘i‘), _T(‘j‘));  // str为"jjzhuomj",n1为2
int n2 = str.Delete(1,2);        // str为"jhuomj",n2为6
int n3 = str.Remove(_T(‘j‘));    // str为"huom",n3为2  

8. CString类的格式化字符串方法

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

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

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

例如:

C++代码

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

关于CString类的内容就讲到这里了,用法不少,但仍不全,大家可以查看MSDN深入学习。

原文地址:https://www.cnblogs.com/Tang-tangt/p/9472563.html

时间: 2024-08-18 04:28:39

VS2010-MFC(MFC常用类:CString类)的相关文章

MFC CString类的函数实现原理

在MFC框架中,CString类用的很多,它是对原来标准c中字符串类型的一种包装,因为里面有两个成员变量char* m_pData和int m_nLength来维护这个类. 对于成员函数: 1.几个默认的构造函数 CString(); //缺省构造 CString( const CString& stringSrc ); //拷贝构造 CString( const char* lpsz ); //根据字符串常量初始化 CString( char ch, int nRepeat = 1); //串

非MFC的DLL中使用CString类

1.头文件添加 /* 非MFC DLL中使用CString */ #define _AFXDLL #include <afx.h> 注意:要定义在 #include<windows.h>之前,否则会报错 2.cpp 文件中添加 /* 非MFC DLL中使用CString */ // The following symbol used to force inclusion of this module for _USRDLL #ifdef _X86_ extern "C&q

VS2010使用MFC类向导时提示“灾难性故障”的解决

这两天想给自己的一个VS2010工程项目通过MFC类向导添加一些控件变量,却发现提示一个错误对话框吓我说“灾难性错误”然后VS2010就崩溃了,要不就是什么也不说直接退出了. 一开始看网上的一些帖子说要装补丁什么的,可是自己的另外两个项目也可以的,应该软件没问题,并且程序也能够正常运行的.又有帖子说清除VS生成的那些.ncb,ipch等中间文件,于是各种try,尝试清除了半天,也还是没有解决. 后来发现同一项目中只有自己的那个主界面对话框类使用类向导时才出问题而别的类也正常的.经过仔细分析有问题

如何在MFC DLL中向C#类发送消息

如何在MFC DLL中向C#类发送消息 一. 引言 由于Windows Message才是Windows平台的通用数据流通格式,故在跨语言传输数据时,Message是一个不错的选择,本文档将描述如何在MFC DLL中向C#窗口类发送消息. 二. 实现过程 1. 新建一个基于MFC的DLL工程,在工程作用是用于生成Dll库函数: 2. 在该工程中新增一个类,CMessager: 3. 在头文件中添加代码如下: 1 #define ZS_API extern "C" _declspec (

【转】VS2010下MFC的串口编程

串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据:当接收数据时,比特流数据被转换为字符数据传递给CPU,再进一步说,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据:当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序.作为一个程序员,要编写通信程序,只需知道通

VS2010下MFC的串口编程

串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据:当接收数据时,比特流数据被转换为字符数据传递给CPU,再进一步说,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据:当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序.作为一个程序员,要编写通信程序,只需知道通

CString转换成int CString类相应函数

CString 型转化成 int 型 把 CString 类型的数据转化成整数类型最简单的方法就是使用标准的字符串到整数转换例程. 虽然通常你怀疑使用_atoi()函数是一个好的选择,它也很少会是一个正确的选择.如果你准备使用 Unicode 字符,你应该用_ttoi(),它在 ANSI 编码系统中被编译成_atoi(),而在 Unicode 编码系统中编译成_wtoi().你也可以考虑使用_tcstoul()或者_tcstol(),它们都能把字符串转化成任意进制的长整数(如二进制.八进制.十进

VS2010的MFC对话框程序中添加菜单栏的过程

VS2010的MFC对话框程序中添加菜单栏的过程 最近在看一个用MFC写的界面的项目的代码,在代码和界面中一直没有看到关于菜单控件是如何添加进对话框的,于是就百度了下.结果,与其它控件(Button等)添加的方式不一样: VS2010的MFC对话框程序中添加菜单栏的过程大致分了这五步. 一.将Menu加入Resource视图中 在WorkSpace中的Resource视图下,在左边目录的任意位置上,先右键-->选择Insert Resource(插入资源)选项,在弹出的对话框中选择Menu以后,

C++ 使用VS2010创建MFC ActiveX工程项目

1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... ActiveX控件的后缀名是OCX或者DLL.一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动态库共存的文件,然后注册ocx文件. ActiveX控件是基于com标准,使得软件部件在网络环境中进行交互的技术集.它与具体的编程语言无关.