一、主要函數(shù) 

vc中最主要函數(shù)不易理解。

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;

}

 

1、Collate,Compare      

與一個(gè)字符長(zhǎng)指針?biāo)傅淖址M(jìn)行比較,與strcmp相同,它們的區(qū)別是,分別調(diào)用_tcscoll,_tcsicmp。

 

2、Delete

int Delete( int nIndex, int nCount = 1 )

返回值是被刪除前的字符串的長(zhǎng)度,nIndex是第一個(gè)被刪除的字符,nCount是一次刪除幾個(gè)字符。根據(jù)我實(shí)驗(yàn)得出的結(jié)果:當(dāng)nCount>字符串的長(zhǎng)度時(shí)會(huì)出錯(cuò),當(dāng)nCount過(guò)大,沒(méi)有足夠的字符刪除時(shí),此函數(shù)不執(zhí)行。

 

3、FindOneOf

int FindOneOf( LPCTSTR lpszCharSet ) const;

此函數(shù)的功能是在查找lpszCharSet中的任意一個(gè)字符,查到一個(gè)就把位置返回,沒(méi)有查到返回0。如:

CString str = "0123456789";

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

x的值是1。

 

4、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;

返回值查找到的序號(hào),ch待搜索的字符,lpszSub待搜索的字符子串,nStart 從那里開(kāi)始搜索。如:

CString str = "0123456789";

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

返回的值是-1.

 

5、GetAt

TCHAR GetAt( int nIndex ) const;

返回標(biāo)號(hào)為nIndex的字符,你可以把字符串理解為一個(gè)數(shù)組,GetAt類似于[].注意nIndex的范圍,如果不合適會(huì)有調(diào)試錯(cuò)誤。

 

6、Insert

int Insert( int nIndex, TCHAR ch )
int Insert( int nIndex, LPCTSTR pstr
)
返回修改后的長(zhǎng)度,nIndex字符(或字符串)插入后的標(biāo)號(hào)。

 

7、Left

CString Left( int nCount ) const;

返回的字符串的前nCount個(gè)字符。

Right與Left類似

 

8、MakeLower ,MakeUpper改變字符的大小寫

MakeReverse字符倒置,如:

       CString str = "X0123456789";

       str.MakeReverse();

str變?yōu)?9876543210X"

 

9、+=

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

將參數(shù)合并到自己身上。

如:       CString str = "0123456789";

              str+="ha";

str為"0123456789ha";

 

10、str[]

TCHAR operator []( int nIndex ) const;

象處理字符數(shù)組一樣處理字符串。

注意是只讀的。

CString str = "0123456789";

       str[0]='x';

是錯(cuò)誤的。

 

11、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 = "\n\t a";

str.TrimLeft();

str為“a”;

    如果沒(méi)有參數(shù),從左刪除字符(\n\t空格等),至到遇到一個(gè)非此類字符.

當(dāng)然你也可以指定刪除那些字符.

如果指定的參數(shù)是字符串,那么遇上其中的一個(gè)字符就刪除.

CString str = "abbcadbabcadb ";

str.TrimLeft("ab");

結(jié)果"cadbabcadb "

 

12、int CString::Remove( TCHAR ch );

ch刪除的字符.

返回刪除字符的個(gè)數(shù),有多個(gè)時(shí)都會(huì)刪除.

 

  二、CString 與char []之間的轉(zhuǎn)換.  

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('\0');
s.ReleaseBuffer();
// 使用完后及時(shí)釋放,以便能使用其它的CString成員函數(shù)

str的值變了.

 

  三、將NULL字節(jié)放入CString中
1,CString str("abc\0""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成員函數(shù)都可以,在使用時(shí)一定要小心。

實(shí)例:動(dòng)態(tài)配置數(shù)據(jù)源
CString strDsn,strDBQ;
strDsn = "DSN=test";
strDBQ.Format("DBQ=%s",strSourceMDBName);
CString strConnect = strDsn + " " + strDBQ ;
strConnect.SetAt(strDsn.GetLength(),'\0'); 
SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, "Microsoft Access Driver (*.mdb)", strConnect);