1. 程式人生 > >vs中CString的用法,以及所需的標頭檔案

vs中CString的用法,以及所需的標頭檔案

1、CString型別的標頭檔案
#include <afx.h>
2、CString的輸出
CString temp="Hello!";
cout<<(LPCTSTR)temp<<endl;
3、CString的用法
CString::Compare

int Compare( LPCTSTR lpsz ) const;
返回值 字串一樣 返回0
小於lpsz 返回-1
大於lpsz 返回1
區分大小字元
CString s1( "abc" );
CString s2( "abd" );
ASSERT( s1.Compare( s2 ) == -1 );
ASSERT( s1.Compare( "abe" ) == -1 );

CString::CompareNoCase

int CompareNoCase( LPCTSTR lpsz ) const;
返回值 字串一樣 返回0
小於lpsz 返回-1
大於lpsz 返回1
不區分大小字元

CString::Collate
int Collate( LPCTSTR lpsz ) const;
同CString::Compare

CString::CollateNoCase
int CollateNocase( LPCTSTR lpsz ) const;
同CString::CompareNoCase

CString::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 s1;
CString s2( "cat" );
CString s3 = s2;
CString s4( s2 + " " + s3 );
CString s5( 'x' ); // s5 = "x"
CString s6( 'x', 6 ); // s6 = "xxxxxx"
CString s7((LPCSTR)ID_FILE_NEW); // s7 = "Create a new document"
CString city = "Philadelphia";

CString::Delete
int Delete( int nIndex, int nCount = 1);
返回值是被刪除前的字串的長度
nIndex是第一個被刪除的字元,nCount是一次刪除幾個字元。根據我實驗得出的結果:當nCount>要刪除字串的最大長度(GetCount() - nIndex)時會出錯,當nCount過大,沒有足夠的字元刪除時,此函式不執行。
例子
CString str1,str2,str3;
char a;
str1 = "nihao";
str2 = "nIhao";
int x;
// int i=(str1 == str2);
str1.Delete(2,3);
如果nCount(3) > GetCount() – nIndex (5-2)就會執行錯誤

CString::Empty

Void Empty( );
沒有返回值 清空操作;
例子
CString s( "abc" );
s.Empty();
ASSERT( s.GetLength( ) == 0 );

CString::Find
int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const;
int Find( TCHAR ch, int nStart ) const;
int Find( LPCTSTR lpszSub, int nStart ) const;
返回值 不匹配的話返回 -1; 索引以0 開始
nStar 代表以索引值nStart 的字元開始搜尋 ,
即為包含以索引nStart字元後的字串
例子
CString s( "abcdef" );
ASSERT( s.Find( 'c' ) == 2 );
ASSERT( s.Find( "de" ) == 3 );
Cstring str(“The stars are aligned”);
Ing n = str.Find('e',5);
ASSERT(n == 12)

CString::FindOneOf
int FindOneOf( LPCTSTR lpszCharSet ) const;
返回值 不匹配的話返回 -1; 索引以0 開始
注意::返回此字串中第一個在lpszCharSet中 也包括字元並且從零開始的索引值
例子
CString s( "abcdef" );
ASSERT( s.FindOneOf( "xd" ) == 3 ); // 'd' is first match.

CString::Format
void Format( LPCTSTR lpszFormat, ... );
void Format( UINT nFormatID, ... );
lpszFormat 一個格式控制字串
nFormatID 字串識別符號
例子
CString str;
Str.Format(“%d”,13);
此時Str為13

CString::GetAt
TCHAR GetAt( int nIndex ) const;
返回標號為nIndex的字元,你可以把字串理解為一個數組,GetAt類似於[].注意nIndex的範圍,如果不合適會有除錯錯誤。

CString::GetBuffer
LPTSTR GetBuffer( int nMinBufLength );
返回值
一個指向物件的(以空字元結尾的)字元緩衝區的LPTSTR 指標。
引數
nMinBufLength
字元緩衝區的以字元數表示的最小容量。這個值不包括一個結尾的空字元的空間。
說明
此成員函式返回一個指向CString 物件的內部字元緩衝區的指標。返回的LPTSTR 不是const,因此可以允許直接修改CString 的內容。如果你使用由GetBuffer 返回的指標來改變字串的內容,你必須在使用其它的CString 成員函式之前呼叫ReleaseBuffer 函式。
在呼叫ReleaseBuffer 之後,由GetBuffer 返回的地址也許就無效了,因為其它的CString 操作可能會導致CString 緩衝區被重新分配。如果你沒有改變此CString 的長度,則緩衝區不會被重新分配。當此CString 物件被銷燬時,其緩衝區記憶體將被自動釋放。
注意,如果你自己知道字串的長度,則你不應該新增結尾的空字元。但是,當你用ReleaseBuffer 來釋放該緩衝區時,你必須指定最後的字串長度。如果你添加了結尾的空字元, 你應該給ReleaseBuffer 的長度引數傳遞-1 ,ReleaseBuffer 將對該緩衝區執行strlen 來確定它的長度。
下面的例子說明了如何用CString::GetBuffer。
// CString::GetBuffer 例子
CString s( "abcd" );
#ifdef _DEBUG
afxDump << "CString s " << s << "\n";
#endif
LPTSTR p = s.GetBuffer( 10 );
strcpy( p, "Hello" ); // 直接訪問CString 物件。
s.ReleaseBuffer( );
#ifdef _DEBUG
afxDump << "CString s " << s << "\n";

#endif