CString 成员函数用法大全

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。

你可能感兴趣的:(常用函数,MFC)