一、主要函數(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      

與一個字符長指針所指的字符串進行比較,與strcmp相同,它們的區(qū)別是,分別調(diào)用_tcscoll,_tcsicmp。

 

2、Delete

int Delete( int nIndex, int nCount = 1 )

返回值是被刪除前的字符串的長度,nIndex是第一個被刪除的字符,nCount是一次刪除幾個字符。根據(jù)我實驗得出的結(jié)果:當nCount>字符串的長度時會出錯,當nCount過大,沒有足夠的字符刪除時,此函數(shù)不執(zhí)行。

 

3、FindOneOf

int FindOneOf( LPCTSTR lpszCharSet ) const;

此函數(shù)的功能是在查找lpszCharSet中的任意一個字符,查到一個就把位置返回,沒有查到返回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;

返回值查找到的序號,ch待搜索的字符,lpszSub待搜索的字符子串,nStart 從那里開始搜索。如:

CString str = "0123456789";

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

返回的值是-1.

 

5、GetAt

TCHAR GetAt( int nIndex ) const;

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

 

6、Insert

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

 

7、Left

CString Left( int nCount ) const;

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

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';

是錯誤的。

 

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”;

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

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

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

CString str = "abbcadbabcadb ";

str.TrimLeft("ab");

結(jié)果"cadbabcadb "

 

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

ch刪除的字符.

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

 

  二、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();
// 使用完后及時釋放,以便能使用其它的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ù)都可以,在使用時一定要小心。

實例:動態(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);