关注微信公众号“二进制小站”~~获取更多分析~~(文末二维码~~)

参考文章:http://www.jizhuomi.com/software/228.html

http://www.cnblogs.com/wind-net/archive/2012/10/31/2747848.html

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字符。

typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > CString;

(1)CString的构造函数:

CString( );

CString( const CString& stringSrc );

CString( TCHAR ch, int nRepeat = 1 );

CString( LPCTSTR lpch, int nLength );

CString( const unsigned char* psz );

CString( LPCWSTR lpsz );

CString( LPCSTR lpsz );

CString()                                                // 缺省构造函数

例: CString    csStr;

CString(const CString& stringSrc)      // 复制构造函数

例:CString    csStr("ABCDEF  中文 123456");

CString    csStr2(csStr);

CString(TCHAR ch, int nRepeat = 1)  // 用字符初始化

例:CString    csStr('a', 5);                   // csStr = "aaaaa"

CString(LPCTSTR lpch, int nLength)  // 用字符串前几个字符初始化

例:CString    csStr("abcdef", 3);       // csStr = "abc"

CString(LPCWSTR lpsz)                     // 用宽字符串初始化

例:wchar_t     s[] = L"abcdef";

CString      csStr(s);                        // csStr = L"abcdef"

CString(LPCSTR lpsz)                       // 用字符串初始化

例:CString     csStr("abcdef");         // csStr = "abcdef"

CString(const unsigned char * psz)   // 用字符串初始化

例:const unsigned char s[] = "abcdef";

const unsigned char *sp = s;

CString csStr(sp);                           // csStr = "abcdef"

(2)常用函数

1)CString类的大小写转换及顺序转换函数

CString& MakeLower();// 将字符串中的所有大写字符转换为小写字符。

CString& MakeUpper();// 将字符串中的所有小写字符转换为大写字符。

CString& MakeReverse();// 将字符串中所有字符的顺序颠倒。

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

2)CString对象的连接

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

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

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

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

 
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"
 

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

 
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
 

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

例如:

 
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 
 

7) CString类的格式化字符串方法

使用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" 
 

8) CString类的获取字符串长度

int GetLength( ) const; // 返回字符串的长度,不包含结尾的空字符。

 
CString str1 = _T("jizhuomi"); cout<<str1.GetLength()<<endl; // 8
 

9)CString类对象字符串的插入

int Insert( int nIndex, TCHAR ch )

int Insert( int nIndex, LPCTSTR pstr ); // 在下标为nIndex的位置,插入字符或字符串。返回插入后对象的长度


CString str1 = _T("jizhuomi"); str1.Insert(2,'1'); //"ji1zhuomi" str1 = _T("jizhuomi"); str1.Insert(2,L"123"); //"ji123zhuomi"
 

当nIndex为负数时,插入在对象开头

当nIndex超出对象末尾时,插入在对象末尾

10)其他操作

void TrimLeft( );

void TrimLeft( TCHAR chTarget );

void TrimLeft( LPCTSTR lpszTargets );

从左删除字符,被删的字符与chTarget或lpszTargets匹配,一直删到第一个不匹配的字符为止

 CString str1 = _T("aaabaacdef");str1.TrimLeft('a');             //"baacdef"str1 = _T("aaabaacdef");str1.TrimLeft(L"ab");           //"cdef"

无参数时删除空格

void TrimRight( );

void TrimRight( TCHAR chTarget );

void TrimRight( LPCTSTR lpszTargets );

从右删除字符,被删的字符与chTarget或lpszTargets匹配,一直删到第一个不匹配的字符为止

例:

csStr=L"abcdeaafaaa";

csStr.TrimRight('a');              //abcdeaaf

csStr=L"abcdeaafaaa";

csStr.TrimRight(L"fa");           //abcde

无参数时删除空格

void Empty( ); // 清空

例:

csStr=L"abcdef";

csStr.Empty();

printf("%d",csStr.GetLength());   //0

BOOL IsEmpty( ) const; // 测试对象是否为空,为空时返回true,不为空时返回false

例:

csStr=L"abc";

csStr.IsEmpty();          //0;

csStr.Empty();

csStr.IsEmpty();         //1;

TCHAR GetAt( int nIndex ) const; // 返回下标为nIndex的字符,与字符串的[]用法相同
 
例:
      csStr=L"abcdef"; 
      csStr.GetAt(2);              //c 
      //当nIndex为负数或超出对象末尾时,会发生无法预料的结果。
 
void SetAt( int nIndex, TCHAR ch );// 给下标为nIndex的字符重新赋值
 
例:
      csStr=L"abcdef"; 
      csStr.SetAt(2,'x');                        //abxdef 
      //当nIndex为负数或超出对象末尾时,会发生无法预料的结果

LPTSTR GetBuffer( int nMinBufLength ); // 申请新的空间,并返回指针

例:

CString csStr=_T("abcde");

LPTSTR pStr=csStr.GetBuffer(10);

strcpy((char*)pStr,"12345");//此处调试总是不过,后来讲字符集改成了“使用多字符集”

csStr.ReleaseBuffer();

pStr=NULL;

//使用完GetBuffer后,必须使用ReleaseBuffer以更新对象内部数据,否则会发生无法预料的结果

void ReleaseBuffer( int nNewLength = -1 ); // 使用GetBuffer后,必须使用ReleaseBuffer以更新对象内部数据

例:

csStr=_T("abc");

LPTSTR pStr=csStr.GetBuffer(10);

strcpy(pStr,"12345");

cout<<csStr.GetLength();

//3(错误的用法)

csStr.ReleaseBuffer();

cout<<csStr.GetLength();

//5(正确)

pStr=NULL;

//CString 对象的任何方法都应在ReleaseBuffer之后调用

LPTSTR GetBufferSetLength( int nNewLength ); // 申请新的空间,并返回指针

例:

csStr="abc";

csStr.GetBufferSetLength(20);

cout<<csStr;

//abc

count<<csStr.GetLength();

//20;

csStr.ReleaseBuffer();

count<<csStr.GetLength();

//3;

//使用GetBufferSetLength后可以不必使用ReleaseBuffer

MFC ---- CString相关推荐

  1. MFC CString GetBuffer/ReleaseBuffer 的使用条件

    今天为了通过串口往单片机里写一个16进制字符去控制单片机的adc的起停,结果糊涂到把'\x01'误写成'\0x01',怎么也得不到意想的结果,程序员有时候会犯低级错误,有时候怎么也跳不出去,这时候通过 ...

  2. MFC CString转换为字符数组

    VC6单文档工程: void CZfszView::OnDraw(CDC* pDC) {CZfszDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TOD ...

  3. MFC CString转ASCII字符串

    参考博文<https://www.cnblogs.com/banluxinshou/p/9081504.html> <https://blog.csdn.net/GoForwardT ...

  4. MFC CString

    大小写,顺序,连接,比较,提取,查找,替换,删除,格式化,分割 1.构造函数: CString(const CString& stringSrc); 将一个已经存在的CString对象stri ...

  5. MFC CString转换为char*

    CString origw("fabregas"); const size_t newsizew = (origw.GetLength() + 1)*2; char *nstrin ...

  6. MFC CString的GetBuffer()/ReleaseBuffer()

    CString GetBuffer()/ReleaseBuffer()两个方法的使用 LPTSTR GetBuffer(int nMinBufLength); void ReleaseBuffer(i ...

  7. MFC CString GetBuffer ReleaseBuffer方法

    一.函数原型 CString::GetBuffer LPTSTR GetBuffer( int nMinBufLength ); throw( CMemoryException ); Return V ...

  8. MFC CString显示中文为乱码问题

    构造函数中加入setlocale(LC_ALL,"chs"); 头文件加入#include <locale.h> 可以解决CString显示中文为乱码问题

  9. mfc CString 转 char *

    https://www.cnblogs.com/banluxinshou/p/9081504.html

最新文章

  1. Qt动画框架The Animation Framework
  2. debian下安装LNMP(三)
  3. python怎么安装matplotlib-[Python]一步步安装numpy,matplotlib
  4. 开通域名绑定DDNS
  5. 【剑指offer】矩形覆盖
  6. 深度 | 宽客玩转华尔街:谁才是新的“华尔街之王”?
  7. 视频加速方案的最优解 - Xilinx硬件加速技术专场(深圳站)
  8. 93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?
  9. 【Python实战】chinesecalendar模块处理中国股市交易日期
  10. LINUX 查看系统信息的命令
  11. java程序员选择多个offer时需要看重哪些?_27 道阿里巴巴 Java 面试题,你会几道?...
  12. JAVA电影购票系统
  13. 网络工程师/技术支持工程师面试题(1)
  14. 作业帮一面+二面+hr面
  15. LeetCode第 252 场周赛 之5187. 收集足够苹果的最小花园周长
  16. 银河麒麟桌面V10SP1安装nosqlbooster 可视化工具
  17. 记住,在看小电影前一定要检查下域名是不是 HTTPS 的
  18. 武魂java_jdk及tomcat的安装
  19. 程序设计第二十二题 空心三角形
  20. 【Vue】Vue生成二维码 Vue把url地址生成二维码手机打开 扫一扫手机端打开实战案例 vue生成二维码

热门文章

  1. Python计算商品复购率
  2. python的猴子补丁(Monkey Patching)
  3. 产学交流 | 重庆理工大学计算机科学与工程学院信息管理系一行到访芝诺数据...
  4. 金钱数字转换为大写中文
  5. ASEMI整流桥KBP310功能引脚图解
  6. 什么是新零售电商系统?
  7. 怎样能让大腿变细方法 揭秘如何瘦大腿和小腿
  8. windows电脑重装系统步骤、cmd常用命令等
  9. 使用python抓取并分析数据—链家网(requests+BeautifulSoup)(转)
  10. stm32 hid游戏手柄程序