转自: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"),); // 构造的字符串对象内容为"www"

CString(TCHAR ch, int nLength = 1);

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

C++代码

CString str(_T('w'),); // 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 ( == 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(); // str2为"jiz"
str2 = str1.Right(); // str2为"mi"
str2 = str1.Mid(,); // str2为"izh"
str2 = str1.Mid(); // 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(,); // 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 = ;
float b = 2.3f;
str.Format(_T("a=%d,b=%f"), a, b); // str为"a=1,b=2.300000"
 

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

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

  1. 在非MFC程序中引用CString

    CString在当今软件设计界里还是小有名气的,说它是MFC中使用的最多的类一点也不过,然而在使用sdk编windows程序的时候,确不能利用CString类,只能用sdk的运行时库,比如strlen ...

  2. VS2010/MFC编程入门之四十二(MFC常用类:CString类)

    上一节鸡啄米讲了分割窗口的有关知识,本节开始讲解MFC的一些常用类,先来说说CString类. CString类简介 CString类作为MFC的常用类,当之无愧.可以这样说,只要是从事MFC开发,基 ...

  3. MFC中的CString类使用方法指南

    MFC中的CString类使用方法指南 原文出处:codeproject:CString Management [禾路:这是一篇比较老的资料了,但是对于MFC的程序设计很有帮助.我们在MFC中使用字符 ...

  4. MFC模板CArray及其派生类

    CArray及其派生类 1. 简介:访问方法及效率和普通的数组一样,比普通数组强大的功能是可以改变数组的大小.Array采用队列方式存储数据,因而其内部数据元素是以物理方式顺序排列的,所以检索.顺序执 ...

  5. 实现MFC扩展DLL中导出类和对话框

    如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对 ...

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

    如何在MFC DLL中向C#类发送消息 一. 引言 由于Windows Message才是Windows平台的通用数据流通格式,故在跨语言传输数据时,Message是一个不错的选择,本文档将描述如何在 ...

  7. VS2010下MFC的串口编程

    串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串 ...

  8. 【转】VS2010下MFC的串口编程

    串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串 ...

  9. VC++ CString类完美总结(整理)

    CString 是编程中一种非常有用的数据类型,它是MFC中的一个类,很大程度上简化了MFC中的许多字符串的操作. CString位于头文件afx.h中. ①.CString 类对象的初始化: CSt ...

随机推荐

  1. C语言实现 冒泡排序 选择排序 希尔排序

    // 冒泡排序 // 选择排序 // 希尔排序 // 快速排序 // 递归排序 // 堆排序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h& ...

  2. ps去除元素的三种常用方法

    1.仿制图章工具,alt+鼠标左键进行选取复制区域,然后左键点击需要覆盖的区域. 2.套锁工具--选择区域--右键填充--内容识别.     3.修补工具,选中区域--拖动适配.     附带另一份较 ...

  3. JAVA Java中@Override的作用

    @Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 1.可以当注释用,方便阅读: 2.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.例 ...

  4. delphi 键盘常用参数(PC端和手机端 安卓/IOS)

    常数名称(红色手机端) 十六进制值 十进制值 对应按键(手机端) Delphi编程表示(字符串型)_tzlin注 0 0 大键盘Delete键 #0 VK_LBUTTON 1 1 鼠标的左键 #1 V ...

  5. Oracle实现行转列+Mybatis

    1.需求 报表需要动态展示某几个公司分别在几个月内销售额情况(前端表头月份是动态的,月时间段是前端参数来选择的,最大为12个月), 页面展示如下 Oracle数据库中数据如下: 可以看到一个公司的月份 ...

  6. bzoj1057: [ZJOI2007]棋盘制作 [dp][单调栈]

    Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应 ...

  7. 「题解」:Kill

    问题 A: Kill 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 80%算法 赛时并没有想到正解,而是选择了另一种正确性较对的贪心验证. 对于每一个怪,我们定义它的 ...

  8. sqoop导出数据|Hive|HDFS和脚本编写

    导出数据 在Sqoop中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,即使用export关键字. HIVE/HDFS到RDBMS ...

  9. 尚学python课程---15、python进阶语法

    尚学python课程---15.python进阶语法 一.总结 一句话总结: python使用东西要引入库,比如 json 1.python如何创建类? class ClassName: :以冒号结尾 ...

  10. mac 安装并使用 mysql 或者 mac mysql 忘记密码,Can't connect to local MySQL server through socket homebrew

    1. brew install mysql 2. 启动mysql mysql.server start 我遇到了这个error,查openstack解决,我在这粘一下 ### Error:Can't ...