MFC ---- CString
来源:互联网 发布:angular4 node sass 编辑:程序博客网 时间:2024/05/07 17:41
参考文章: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
- CString MFC
- MFC--CString
- MFC ---- CString
- [MFC]CString类型转换
- MFC CString用法指南
- MFC CString 操作指南
- MFC CString 的用法
- MFC CString 用法小结
- [MFC]CString类型转换
- [MFC]CString类型转换
- MFC CString 操作指南
- MFC CString转string
- MFC CString 转 char*
- MFC CString操作指南
- MFC Cstring ,double 互换
- MFC CString的用法
- [MFC] CString member function
- RobotFramework安装问题解决
- 合并区间
- 点赞
- java异常处理:finally中不要return
- Python学习笔记(6) -- 字符转数字、字符串转整型(char2num、str2int)
- MFC ---- CString
- Codeforces 429B B. Working out dp
- 微信公众平台开发生成带参数二维码
- JZOJ 1845——约数
- hdu 3015 Disharmony Trees(树状数组)
- BZOJ 1877 [SDOI2009]晨跑 费用流
- XML
- 计算语言学之自信息与互信息在新词发现、短语识别中的应用
- android HAL层自我总结