CString( TCHAR ch, int nRepeat = 1 );
CString csStr('a',5);
//csStr="aaaaa"
CString( LPCWSTR lpsz );
wchar_t s[]=L"abcdef";
CString csStr(s);
//csStr=L"abcdef"
CString( const unsigned char* psz );
const unsigned char s[]="abcdef";
const unsigned char* sp=s;
CString csStr(sp);
//csStr="abcdef"
CString( LPCSTR lpsz );
CString csStr("abcdef");
//csStr="abcdef"
返回字符串的长度,不包含结尾的空字符
int GetLength( ) const;
Str = "ABCDEF中文123456";
printf("%d", Str.GetLength()); //16
颠倒字符串的顺序
void MakeReverse( );
Str = "ABCDEF中文123456";
Str.MakeReverse();
cout << Str; //654321文中FEDCBA
将小写字母转换为大写字母
void MakeUpper( );
Str = "abcdef中文123456";
Str.MakeUpper();
cout << Str; //ABCDEF中文123456
将大写字母转换为小写字母
void MakeLower( );
Str = "ABCDEF中文123456";
Str.MakeLower();
cout << Str; //abcdef中文123456
区分大小写比较两个字符串,相等时返回0,大于时返回1,小于时返回-1
int Compare( LPCTSTR lpsz ) const;
Str = "abcdef中文123456";
Str2 = "ABCDEF中文123456";
cout << Str.CompareNoCase(Str2); //0
不区分大小写比较两个字符串,相等时返回0,大于时返回1,小于时返回-1
int CompareNoCase( LPCTSTR lpsz ) const;
Str = "abcdef中文123456";
Str2 ="ABCDEF中文123456";
cout << Str.CompareNoCase(Str2); //-1
在下标为nIndex的位置,插入字符或字符串。返回插入后对象的长度
int Insert( int nIndex, TCHAR ch )
int Insert( int nIndex, LPCTSTR pstr )
Str="abc";
Str.Insert(2,'x');
cout << Str; //abxc
csStr = "abc";
csStr.Insert(2,"xyz");
cout << Str; //abxyzc
//当nIndex为负数时,插入在对象开头
//当nIndex超出对象末尾时,插入在对象末尾
从左删除字符,被删的字符与chTarget或lpszTargets匹配,一直删到第一个不匹配的字符为止
void TrimLeft( );
void TrimLeft( TCHAR chTarget );
void TrimLeft( LPCTSTR lpszTargets );
Str="aaabaacdef";
Str.TrimLeft('a');
cout << Str; //baacdef
Str = "aaabaacdef";
Str.TrimLeft("ab");
cout << Str; //cdef
//无参数时删除空格
从右删除字符,被删的字符与chTarget或lpszTargets匹配,一直删到第一个不匹配的字符为止
void TrimRight( );
void TrimRight( TCHAR chTarget );
void TrimRight( LPCTSTR lpszTargets );
Str = "abcdeaafaaa";
Str.TrimRight('a');
cout << Str; //abcdeaaf
Str = "abcdeaafaaa";
Str.TrimRight("fa");
cout << Str; //abcde
//无参数时删除空格
清空:void Empty( );
CString Str="abcdef";
Str.Empty();
printf("%d", Str.GetLength()); //0
测试对象是否为空,为空时返回零,不为空时返回非零:BOOL IsEmpty( ) const
CString Str="abc";
cout << Str.IsEmpty(); //0;
Str.Empty();
cout << Str.IsEmpty(); //1;
int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const;
int Find( TCHAR ch, int nStart ) const;
int Find( LPCTSTR pstr, int nStart ) const;
查找字串,nStart为开始查找的位置。未找到匹配时返回-1,否则返回字串的开始位置
Str = "abcdef";
cout << Str.Find('b'); //1
cout << Str.Find("de"); //3
cout << Str.Find('b',3); //-1
cout << Str.Find('b',0); //1
cout << Str.Find("de",4); //-1
cout << Str.Find("de",0); //3
//当nStart超出对象末尾时,返回-1。
//当nStart为负数时,返回-1。
查找lpszCharSet中任意一个字符在CString对象中的匹配位置。未找到时返回-1,否则返回字串的开始位置
int FindOneOf( LPCTSTR lpszCharSet ) const;
Str = "abcdef";
cout << Str.FindOneOf("cxy"); //2
从后向前查找第一个匹配,找到时返回下标。没找到时返回-1
int ReverseFind( TCHAR ch ) const;
Str="abba";
cout << Str.ReverseFind('a'); //3
void Format( LPCTSTR lpszFormat, ... );
void Format( UINT nFormatID, ... );
格式化对象,与C语言的sprintf函数用法相同
Str.Format("%d", 13);
cout << Str; //13
返回下标为nIndex的字符,与字符串的[]用法相同:
TCHAR GetAt(int nIndex) const;
CString Str="abcdef";
cout << Str.GetAt(2); //c
//当nIndex为负数或超出对象末尾时,会发生无法预料的结果。
给下标为nIndex的字符重新赋值:
void SetAt(int nIndex, TCHAR ch)
CString Str = "abcdef";
Str.SetAt(2,'x');
cout<
从左取字串:
CString Left(int nCount) const;
CString Str="abcdef";
cout << Str.Left(3); //abc
//当nCount等于0时,返回空。
//当nCount为负数时,返回空。
//当nCount大于对象长度时,返回值与对象相同。
从右取字串:
CString Right(int nCount) const;
CString Str="abcdef";
cout << Str.Right(3); //def
//当nCount等于0时,返回空。
//当nCount为负数时,返回空。
//当nCount大于对象长度时,返回值与对象相同。
从中间开始取字串:
CString Mid( nt nFirst) const;
CString Mid(int nFirst, int nCount) const;
csStr="abcdef";
cout<
申请新的空间,并返回指针:
LPTSTR GetBuffer(int nMinBufLength);
不给传递参数,默认值 0,意思是这个字符串的指针,保证不加长它。当调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。当设定的长度小于原字符串长度时,nMinBufLength = nOldLen,该参数会被忽略,不分配内存,指向原CString; 当设定的长度大于原字符串本身的长度时就要重新分配(reallocate)一块比较大的空间出来。
注意在 GetBuffer 和 ReleaseBuffer 之间,一定不能操作这个 CString 对象的任何方法,因为 在ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
如果希望增加字符串的长度,首先要知道这个字符串可能会有多长,好比是声明字符串数组的时候用:char buffer[1024],表示 1024 个字符空间足以让你做任何想做得事情。在 CString 中与之意义相等的表示法:LPTSTR p = s.GetBuffer(1024),调用这个函数后,不仅获得了字符串缓冲区的指针,而且同时还获得了长度至少为 1024 个字符的空间(注意,我说的是“字符”,而不是“字节”,因为 CString 是以隐含方式感知 Unicode 的)。
同时,如果有一个常量串指针,这个串本身的值被存储在只读内存中,如果试图存储它,即使你已经调用了 GetBuffer ,并获得一个只读内存的指针,存入操作会失败,并报告存取错误。
CString Str = "abcde";
LPTSTR pStr = Str.GetBuffer(10);
strcpy(pStr,"12345");
Str.ReleaseBuffer();
pStr = NULL;
cout << Str //12345
使用完GetBuffer后,必须使用ReleaseBuffer以更新对象内部数据,否则会发生无法预料的结果。
CString Str = "abc";
LPTSTR pStr = Str.GetBuffer(10);
strcpy(pStr,"12345");
cout << Str.GetLength(); //3(错误的用法),CString对象的任何方法都应在ReleaseBuffer之后调用
Str.ReleaseBuffer();
cout << Str.GetLength(); //5(正确)
pStr = NULL;
申请新的空间,并返回指针:
LPTSTR GetBufferSetLength(int nNewLength);
CString Str="abc";
Str.GetBufferSetLength(20);
cout << Str; //abc
count << Str.GetLength(); //20;
Str.ReleaseBuffer();
count << Str.GetLength(); //3;
使用GetBufferSetLength后可以不必使用ReleaseBuffer。