一、主要函數
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;
}
1、Collate,Compare
與一個字符長指針所指的字符串進行比較,與strcmp相同,它們的區別是,分別調用_tcscoll,_tcsicmp。
2、Delete
int Delete( int nIndex, int nCount = 1 )
返回值是被刪除前的字符串的長度,nIndex是第一個被刪除的字符,nCount是一次刪除幾個字符。根據我實驗得出的結果:當nCount>字符串的長度時會出錯,當nCount過大,沒有足夠的字符刪除時,此函數不執行。
3、FindOneOf
int FindOneOf( LPCTSTR lpszCharSet ) const;
此函數的功能是在查找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的字符,你可以把字符串理解為一個數組,GetAt類似于[].注意nIndex的范圍,如果不合適會有調試錯誤。
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變為"9876543210X"
9、+=
const CString& operator +=( const CString& string );
const CString& operator +=( TCHAR ch );
const CString& operator +=( LPCTSTR lpsz );
將參數合并到自己身上。
如: CString str = "0123456789";
str+="ha";
str為"0123456789ha";
10、str[]
TCHAR operator []( int nIndex ) const;
象處理字符數組一樣處理字符串。
注意是只讀的。
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”;
如果沒有參數,從左刪除字符(\n\t空格等),至到遇到一個非此類字符.
當然你也可以指定刪除那些字符.
如果指定的參數是字符串,那么遇上其中的一個字符就刪除.
CString str = "abbcadbabcadb ";
str.TrimLeft("ab");
結果"cadbabcadb "
12、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('\0');
s.ReleaseBuffer();
// 使用完后及時釋放,以便能使用其它的CString成員函數
str的值變了.
三、將NULL字節放入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成員函數都可以,在使用時一定要小心。
實例:動態配置數據源
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);