VC入門寶典三(String) (轉)

worldblog發表於2007-12-14
VC入門寶典三(String) (轉)[@more@]

CString:namespace prefix = o ns = "urn:schemas--com::office" />

/develop/author/netauthor/he_zhidan/">何志丹

主要內容:

1,主要的實現

2,常用函式

3.CString與char []的相互轉換

4,將NULL位元組放入CString中

 

vc中最主要函式不易理解。

CString::CString(char *p)

{

  int n=strlen(p);

  m_data = new char[n+1];

  strcpy(m_data,p);

}

 

CString::CString(CString &other)

{

  int n=strlen(other.m_data);

  m_data = new char[n+1];

  strcpy(m_data,other.m_data);

}

 

CString& CString::operator = (CString& other)

{

  delete[] m_data;

  int n=strlen(other.m_data);

  m_data = new char[n+1];

  strcpy(m_data,other.m_data);

  return *this;

}

 

String::~String()

{

  delete [] m_data;

}

 

Collate,Compare  與一個字元長指標所指的字串進行比較,與strcmp相同,它們的區別是,分別_tcll,_tcsicmp。

Delete

int Delete( int nIndex, int nCount = 1 )

返回值是被刪除前的字串的長度,nIndex是第一個被刪除的字元,nCount是一次刪除幾個字元。根據我實驗得出的結果:當nCount>字串的長度時會出錯,當nCount過大,沒有足夠的字元刪除時,此函式不。

 

FindOneOf

int FindOneOf( LPCTSTR lpszCharSet ) const;

此函式的功能是在查詢lpszCharSet中的任意一個字元,查到一個就把位置返回,沒有查到返回0。如:

CString str = "0123456789";

int x = str.FindOneOf("31");

x的值是1。

 

Find

int Find( TCHAR ch ) const;

int Find( LPCTSTR lpszSub ) const;

int Find( TCHAR ch, int nStart ) const;

int Find( LPCTSTR pstr, int nStart ) const;

返回值查詢到的序號,ch待搜尋的字元,lpszSub待搜尋的字元子串,nStart 從那裡開始搜尋。如:

 

CString str = "0123456789";

int x = str.Find("34",4);

返回的值是-1.

 

GetAt

TCHAR GetAt( int nIndex ) const;

返回標號為nIndex的字元,你可以把字串理解為一個陣列,GetAt類似於[].注意nIndex的範圍,如果不合適會有錯誤。

 

Insert

int Insert( int nIndex, TCHAR ch )
int Insert( int nIndex, LPCTSTR pstr )
返回修改後的長度,nIndex字元(或字串)插入後的標號。

Left

CString Left( int nCount ) const;

返回的字串的前nCount個字元。

Right與Left類似

 

MakeLower ,MakeUpper改變字元的大小寫

MakeReverse字元倒置,如:

  CString str = "X0123456789";

  str.MakeReverse();

str變為"9876543210X"

 

 +=

const CString& operator +=( const CString& string );
const CString& operator +=( TCHAR ch );
const CString& operator +=( LPCTSTR lpsz );

將引數合併到自己身上。

如:  CString str = "0123456789";

    str+="ha";

str為"0123456789ha";

 

str[]

TCHAR operator []( int nIndex ) const;

象處理字元陣列一樣處理字串。

注意是隻讀的。

CString str = "0123456789";

  str[0]='x';

是錯誤的。

 

 

TrimLeft,TrimRight

void TrimLeft( );

void CString::TrimLeft( TCHAR chTarget );

void CString::TrimLeft( LPCTSTR lpszTargets );

void TrimRight( );

void CString::TrimRight( TCHAR chTarget );

void CString::TrimRight( LPCTSTR lpszTargets );

 

CString str = "nt a";

str.TrimLeft();

str為“a”;

 如果沒有引數,從左刪除字元(nt空格等),至到遇到一個非此類字元.

當然你也可以指定刪除那些字元.

如果指定的引數是字串,那麼遇上其中的一個字元就刪除.

CString str = "abbcaabcadb ";

str.TrimLeft("ab");

結果"cadbabcadb "

 

int CString::Remove( TCHAR ch );

ch刪除的字元.

返回刪除字元的個數,有多個時都會刪除.

 

CString 與char []之間的轉換. 

char str[100] = ”str”;

CString sstr = “sstr”;

str.Format(“%s”,str);

str = LPCTSTR sstr;

strcpy(str,(LPCTSTR)sstr);

如果是賦值,則要:

CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在這裡新增使用p的程式碼
if(p != NULL) *p = _T('');
s.ReleaseBuffer();
// 使用完後及時釋放,以便能使用其它的CString成員函式

str的值變了.

 

將NULL位元組放入CString中
1,CString str("abc""def", 7);
  str +="g";
  int nLength = str.GetLength();
  nLength為8.
2,CString str("My name is hedan!");
  str.SetAt(5, 0);
  int nLength = str.GetLength();
注意:不是所有的CString成員函式都可以,在使用時一定要小心。

例項:動態資料來源
CString strDsn,strDBQ;
strDsn = "DSN=test";
strDBQ.Format("DBQ=%s",strMDBName);
CString strConnect = strDsn + " " + strDBQ ;
strConnect.SetAt(strDsn.GetLength(),''); 
ConfigDataSource(NULL, ODBC_ADD_SYS_DSN, "Microsoft Access (*.mdb)", strConnect);


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993537/,如需轉載,請註明出處,否則將追究法律責任。

相關文章