1. 程式人生 > >整理:CString類的完美總結&&CString 成員函式用法大全&&string 與 CString 轉化&& 和的區別

整理:CString類的完美總結&&CString 成員函式用法大全&&string 與 CString 轉化&& 和的區別

CString類的完美總結:

①、CString 類物件的初始化:

CString str;

CString str1(_T("abc"));

CString str2 = _T("defg");


TCHAR szBuf[] = _T("kkk");

CString str3(szBuf);

CString str4 = szBuf;


TCHAR *p = _T("1k2");

//TCHAR * 轉換為 CString

CString str5(p);

CString str6 = p;


CString str7(str1);

CString str8 = str7;


②、字串基本操作:

● 長度:GetLength();
CString str(_T("abc"));

int len = str.GetLength(); //len == 3


● 是否為空,即不含字元:IsEmpty();

● 清空字串:Empty();

CString str(_T("abc"));

BOOL mEmpty = str.IsEmpty(); //mEmpty == FALSE

str.Empty();

mEmpty = str.IsEmpty(); //mEmpty == TRUE

● 轉換大小寫:MakeUpper、MakeLower

● 轉換順序:MakeReverse

CString str(_T("Abc"));

str.MakeUpper(); //str == ABC

str.MakeLower(); //str == abc

str.MakeReverse(); //str == cba


● 字串的連線:+、+=

CString str(_T("abc"));

str = _T("de") + str + _T("kp"); //str == deabckp

str += _T("123"); //str == deabckp123

TCHAR szBuf[] = _T("789");

str += szBuf; //str == deabckp123789


● 字串的比較:==、!=、(<、>、<=、>= 不常用)、Compare(區分大小寫)、CompareNoCase(不區分大小寫)

CString str1(_T("abc"));

CString str2 = _T("aBc");

if (str1 == str2){

MessageBox(_T("str1 等於 str2"));

}else{

MessageBox(_T("str1 不等於 str2"));

}


③、字串的查詢:

Find、ReverseFind、FindOneOf 三個函式可以實現字串的查詢操作

Find 從指定位置開始查詢指定的字元或者字串,返回其位置,找不到返回 -1;

舉例:
CString str(_T("abcdefg"));

int idx = str.Find(_T("cde"), 0); //idx 的值為2;

ReverseFind 從字串末尾開始查詢指定的字元,返回其位置,找不到返回 -1,雖然是從後向前查詢,但是位置為從開始算起;

CString str(_T("abcdefg"));

int idx = str.ReverseFind('e'); //idx 的值為4;

FindOneOf 查詢引數中給定字串中的任意字元,返回第一次出現的位置,找不到返回 -1;

CString str(_T("abcabcd"));

int idx = str.FindOneOf(_T("cbd")); //idx 的值為1;


④、字串的替換與刪除:

Replace 替換 CString 物件中的指定的字元或者字串,返回替換的個數,無匹配字元返回 0;

CString str(_T("abcdabc"));

int num = str.Replace('b', 'k'); //str == akcdakc, num == 2



CString str(_T("abcdabc"));

int num = str.Replace(_T("bc"), _T("kw")); //str == akwdakw, num == 2


Remove 刪除 CString 物件中的指定字元,返回刪除字元的個數,有多個時都會刪除;

CString str(_T("abcdabcb"));

int num = str.Remove('b'); //str == acdac, num == 3

Delete 刪除 CString 物件中的指定位置的字元,返回處理後的字串長度;

CString str(_T("abcd"));

int num = str.Delete(1, 3); //str == a, num == 1


⑤、字串的提取:

Left、Mid、Right 三個函式分別實現從 CString 物件的 左、中、右 進行字串的提取操作;

CString str(_T("abcd"));

CString strResult = str.Left(2); //strResult == ab

strResult = str.Mid(1); //strResult == bcd

strResult = str.Mid(0, 2); //strResult == ab

strResult = str.Right(2); //strResult == cd



⑥、單個字元的修改:

GetAt、SetAt 可以獲取與修改 CString 物件中的單個 TCHAR 型別字元;

操作符也可以獲取 CString 物件中的單個字元,但為只讀的,不能進行修改;

CString str(_T("abcd"));

str.SetAt(0, 'k'); //str == kbck

TCHAR ch = str.GetAt(2); //ch == c

⑦、其他型別與 CString 物件型別的轉換:

● 格式化字串:Format 方法,實現從 int、long 等數值型別、TCHAR、TCHAR * 等型別向 CString 型別的轉換;

int num = 6;

CString str;

str.Format(_T("%d"), num);


● CString 型別向 int 等數值型別、TCHAR * 型別的轉換:
TCHAR *pszBuf = str.GetBuffer();

str.ReleaseBuffer();



TCHAR *p = (LPTSTR)(LPCTSTR)str;



CString str1(_T("123"));

int num = _ttoi(str1);

⑧、CString 物件的 Ansi 與 Unicode 轉換:

大家可以直接使用上節課給大家講解的方法,此外這裡給大家介紹一種從 Ansi 轉換到 Unicode 的隱含方法:

//當前工程環境為Unicode

CString str;

str = "abc";

char *p = "defg";

str = p;


⑨、 CString 物件字串所佔用的位元組數:

CString str = _T("abc");

錯誤的求法:sizeof(CString)、sizeof(str)

正確的求法:str.GetLength()*sizeof(TCHAR)



⑩、當作為 TCHAR * 型別傳參時,確保申請了足夠用的空間,比如使用 GetModuleFileName 函式;

CString的建構函式

CString( );
例:CString csStr;

CString( const CString& stringSrc );
例:CString csStr("ABCDEF中文123456");
    CString csStr2(csStr);

CString( TCHAR ch, int nRepeat = 1 );
例:CString csStr('a',5);
//csStr="aaaaa"

CString( LPCTSTR lpch, int nLength );
例:CString csStr("abcdef",3);
//csStr="abc"

CString( LPCWSTR lpsz );
例:wchar_t s[]=L"abcdef";
    CString csStr(s);
//csStr=L"abcdef"

CString( const unsigned char* psz );
例:const unsigned char s[]="abcdef";
    const unsigned char* sp=s;
    CString csStr(sp);
//csStr="abcdef"

CString( LPCSTR lpsz );
例:CString csStr("abcdef");
//csStr="abcdef"

int GetLength( ) const;
返回字串的長度,不包含結尾的空字元。
例:csStr="ABCDEF中文123456";
    printf("%d",csStr.GetLength());       //16

void MakeReverse( );
顛倒字串的順序
例:csStr="ABCDEF中文123456";
    csStr.MakeReverse();
    cout<<csStr;                  //654321文中FEDCBA

void MakeUpper( );
將小寫字母轉換為大寫字母
例:csStr="abcdef中文123456";
    csStr.MakeUpper();
    cout<<csStr;                  //ABCDEF中文123456

void MakeLower( );
將大寫字母轉換為小寫字母
例:csStr="ABCDEF中文123456";
    csStr.MakeLower();
    cout<<csStr;                  //abcdef中文123456

int Compare( LPCTSTR lpsz ) const;
區分大小寫比較兩個字串,相等時返回0,大於時返回1,小於時返回-1
例:csStr="abcdef中文123456";
    csStr2="ABCDEF中文123456";
    cout<<csStr.CompareNoCase(csStr2);             //0

int CompareNoCase( LPCTSTR lpsz ) const;
不區分大小寫比較兩個字串,相等時返回0,大於時返回1,小於時返回-1
例:csStr="abcdef中文123456";
    csStr2="ABCDEF中文123456";
    cout<<csStr.CompareNoCase(csStr2);             //-1

int Delete( int nIndex, int nCount = 1 )
刪除字元,刪除從下標nIndex開始的nCount個字元
例:csStr="ABCDEF";
    csStr.Delete(2,3);
    cout<<csStr;              // ABF
//當nIndex過大,超出對像所在記憶體區域時,函式沒有任何操作。
//當nIndex為負數時,從第一個字元開始刪除。
//當nCount過大,導致刪除字元超出對像所在記憶體區域時,會發生無法預料的結果。
//當nCount為負數時,函式沒有任何操作。


int Insert( int nIndex, TCHAR ch )
int Insert( int nIndex, LPCTSTR pstr )

在下標為nIndex的位置,插入字元或字串。返回插入後物件的長度
例:csStr="abc";
    csStr.Insert(2,'x');
    cout<<csStr;                     //abxc
    csStr="abc";
    csStr.Insert(2,"xyz");
    cout<<csStr;                     //abxyzc
//當nIndex為負數時,插入在物件開頭
//當nIndex超出物件末尾時,插入在物件末尾


int Remove( TCHAR ch );
移除物件內的指定字元。返回移除的數目
例:csStr="aabbaacc";
    csStr.Remove('a');
    cout<<csStr;                     //bbcc

int Replace( TCHAR chOld, TCHAR chNew );
int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );

替換字串
例:csStr="abcdef";
    csStr.Replace('a','x');
    cout<<csStr;                    //xbcdef
    csStr="abcdef";
    csStr.Replace("abc","xyz");
    cout<<csStr;                    //xyzdef

void TrimLeft( );
void TrimLeft( TCHAR chTarget );
void TrimLeft( LPCTSTR lpszTargets );

從左刪除字元,被刪的字元與chTarget或lpszTargets匹配,一直刪到第一個不匹配的字元為止
例:csStr="aaabaacdef";
    csStr.TrimLeft('a');
    cout<<csStr;                //baacdef
    csStr="aaabaacdef";
    csStr.TrimLeft("ab");
    cout<<csStr;                //cdef
//無引數時刪除空格

void TrimRight( );
void TrimRight( TCHAR chTarget );
void TrimRight( LPCTSTR lpszTargets );

從右刪除字元,被刪的字元與chTarget或lpszTargets匹配,一直刪到第一個不匹配的字元為止
例:csStr="abcdeaafaaa";
    csStr.TrimRight('a');
    cout<<csStr;               //abcdeaaf
    csStr="abcdeaafaaa";
    csStr.TrimRight("fa");
    cout<<csStr;                //abcde
//無引數時刪除空格


void Empty( );
清空
例:csStr="abcdef";
    csStr.Empty();
    printf("%d",csStr.GetLength());    //0

BOOL IsEmpty( ) const;
測試物件是否為空,為空時返回零,不為空時返回非零
例:csStr="abc";
    cout<<csStr.IsEmpty();         //0;
    csStr.Empty();
    cout<<csStr.IsEmpty();         //1;

int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const;
int Find( TCHAR ch, int nStart ) const;
int Find( LPCTSTR pstr, int nStart ) const;

查詢字串,nStart為開始查詢的位置。未找到匹配時返回-1,否則返回字串的開始位置
例:csStr="abcdef";
    cout<<csStr.Find('b');       //1
    cout<<csStr.Find("de");      //3
    cout<<csStr.Find('b',3);     //-1
    cout<<csStr.Find('b',0);     //1
    cout<<csStr.Find("de",4);    //-1
    cout<<csStr.Find("de",0);    //3
//當nStart超出物件末尾時,返回-1。
//當nStart為負數時,返回-1。


int FindOneOf( LPCTSTR lpszCharSet ) const;
查詢lpszCharSet中任意一個字元在CString物件中的匹配位置。未找到時返回-1,否則返回字串的開始位置
例:csStr="abcdef";
    cout<<csStr.FindOneOf("cxy");       //2

CString SpanExcluding( LPCTSTR lpszCharSet ) const;
返回物件中與lpszCharSet中任意匹配的第一個字元之前的子串
例:csStr="abcdef";
    cout<<csStr.SpanExcluding("cf");    //ab

CString SpanIncluding( LPCTSTR lpszCharSet ) const;
從物件中查詢與lpszCharSe中任意字元不匹配的字元,並返回第一個不匹配字元之前的字串
例:csStr="abcdef";
    cout<<csStr.SpanIncluding("fdcba");    //abcd

int ReverseFind( TCHAR ch ) const;
從後向前查詢第一個匹配,找到時返回下標。沒找到時返回-1
例:csStr="abba";
    cout<<csStr.ReverseFind('a');        //3

void Format( LPCTSTR lpszFormat, ... );
void Format( UINT nFormatID, ... );

格式化物件,與C語言的sprintf函式用法相同
例:csStr.Format("%d",13);
    cout<<csStr;                       //13

TCHAR GetAt( int nIndex ) const;
返回下標為nIndex的字元,與字串的[]用法相同
例:csStr="abcdef";
    cout<<csStr.GetAt(2);             //c
//當nIndex為負數或超出物件末尾時,會發生無法預料的結果。


void SetAt( int nIndex, TCHAR ch );
給下標為nIndex的字元重新賦值
例:csStr="abcdef";
    csStr.SetAt(2,'x');
    cout<<csStr;                      //abxdef
//當nIndex為負數或超出物件末尾時,會發生無法預料的結果。


CString Left( int nCount ) const;
從左取字串
例:csStr="abcdef";
    cout<<csStr.Left(3);           //abc
//當nCount等於0時,返回空。
//當nCount為負數時,返回空。
//當nCount大於物件長度時,返回值與物件相同。


CString Right( int nCount ) const;
從右取字串
例:csStr="abcdef";
    cout<<csStr.Right(3);           //def
//當nCount等於0時,返回空。
//當nCount為負數時,返回空。
//當nCount大於物件長度時,返回值與物件相同。


CString Mid( int nFirst ) const;
CString Mid( int nFirst, int nCount ) const;

從中間開始取字串
例:csStr="abcdef";

相關推薦

整理CString完美總結&&CString 成員函式用法大全&&string CString 轉化&& 區別

CString類的完美總結: ①、CString 類物件的初始化: CString str; CString str1(_T("abc")); CString str2 = _T("defg"); TCHAR szBuf[] = _T("kkk"); CStri

VC++ MFC中CString完美總結整理

CString位於標頭檔案afx.h中。①、CString 類物件的初始化:CString str;CString str1(_T("abc"));CString str2 = _T("defg");TCHAR szBuf[] = _T("kkk");CString str3(szBuf);CString s

MFC字串操作(一)MFC CString 成員函式用法大全

CString的建構函式 CString( ); 例:CString csStr; CString( const CString& stringSrc ); 例:CString csStr("ABCDEF中文123456");     CString csStr2(

CMainFrame的四個成員函式

框架類CMainFrame的四個成員函式為:AssertValid()和Dump(),OnCreate()和PreCreateWindow(). (1)AssertValid()用來診斷CMainFrame物件是否有效 (2)Dump()用來輸出CMainFrame物件的狀態資訊。

python3語言學習筆記(三資料型別內建函式

1.Python3 數字(Number) 數字型別轉換: int(x) 將x轉換為一個整數。 float(x) 將x轉換到一個浮點數。 complex(x) 將x轉換到一個複數,實數部分為 x,虛數部分為 0。 complex(x, y) 將 x 和 y

的一些預設成員函式

  //1.編譯器為我們實現了哪些類成員函式 class Empty {}; //C++ 98 會有如下函式 public: Empty2() {} //預設建構函式 Empty2(const Empty2&) {}//預設複製建構

模板中的成員函式模板外定義要注意的地方

1、在宣告類前要有類模板的宣告 2、每個成員函式在模板外定義的時候前面都要有類模板的宣告,注意是每個。 #include<iostream> using namespace std; template<class numtype> //類模板宣

C++ 給結構體成員 函式指標 賦值

myStruct標頭檔案 myStruct.h class CMyClass; struct {  int nFlag;  void (CMyClass::*myinit)(int n);  void (CMyClass::*myopen)(int n,void* arg)

【03】、內聯成員函式、結構體、this指標、記憶體、作用域

C++程式的記憶體格局通常分為四個區:全域性資料區(data area),程式碼區(code area),棧區(stack area),堆區(heap area)(即自由儲存區)。全域性資料區存放全域性變數,靜態資料和常量;所有類成員函式和非成員函式程式碼存放在程式碼區;為執行函式而分配的區域性變數、函式引數

C++ stl---string裡常用的成員函式

string類的建構函式: string(const char *s);    //用c字串s初始化string(int n,char c);     //用n個字元c初始化 此外,string類還支援預設建構函式和複製建構函式,如string s1;string s2="hello";都是正確的寫法。當

ROS 內如何使用成員函式作為subscribe的回撥函式(this指標)

ros::Subscriber sub = n.subscribe("chatter", 1000, &Listener::callback, &listener); 使用類內函式時,將第四個引數替換成this: ros::Subscriber sub

內定義的成員函式是行內函數

之前看書的時候沒有注意到這點,今天再翻primer發現了這句話,感覺好神奇,特意來做個筆記!在類內定義的成員函式預設為inline,不論前面是否加了inline,當然,是否內聯還是取決於編譯器啦~而在

C++的內聯成員函式在哪定義

C++類的內聯成員函式的放置,應該放在標頭檔案中。那麼這到底是為什麼呢?僅僅是一種程式碼規範問題還是必須這樣做呢?     函式可以在多處宣告,但只能在一個地方定義,不然就會出現重定義。大部分函式預設是外部連結,而inline函式預設為內部鏈 接。也就是說inline函式只

C++11特性--新的功能--特殊的成員函式(移動建構函式,移動賦值運算子),預設方法禁用方法(default,delete),委託建構函式,管理虛方法(override,final)

      class A      {         public:            void fun(int x )            {               cout<<x<<endl;             }                      

物件的六個預設成員函式之this指標建構函式

類和物件的六個預設成員函式之建構函式 this指標: 在C++中的成員函式也是按照C類似的方式處理的,即:成員函式實際上也有一個指標時隱藏的,指向了呼叫函式的物件本身,這個指標就是this指標 t

8.18在模板外定義成員函式,實現3個數求和

#include<iostream> using namespace std; template<typename T> //模板宣告,其中T為型別引數 class sum{

中的常成員函式的使用定義

如果只對物件進行讀操作,則該成員函式可以設計成常成員函式。設計成常成員函式的好處是:讓使用者一目瞭然地知道該成員函式不會改變物件的值。 常成員函式的宣告和定義在形式上必須一致,即在函式形參列表的右括號後面加上const。 //---------main.cpp-------

的六大預設成員函式

1. 建構函式 如果類的成員變數為私有的,要對這些成員初始化必須呼叫一個共有的成員函式來進行. 這個共有的成員函式在定義物件的同時會自動執行一次,被呼叫的函式稱為建構函式. 建構函式的特點: 1.函式名與類名相同. 2. 無返回值. 3.建構函式可以過載. 4.例項化物件時

微信小程式小白總結全攻略2-學習路線相關資源除錯工具

廢話都在前一章講了,這裡直接切入正題。 下面以我自己的微信小程式全棧學習路線(淺嘗輒止式的),按照時間順序往下依次列出,並附上對應的除錯工具和方法、學習資源以及我的評價 一、前端部分 (一)HTML(超文字標記語言:HyperText Markup Language) 除錯工具:

DB2資料庫學習總結(一)——round函式用法

DB2資料庫需要用到兩個函式實現四捨五入,分別是:CAST、round round函式本身就是實現四捨五入,為什麼還要用CAST函式? 案例講解: 建立一張測試表用於模擬四捨五入的情景。對於金額欄位一般將型別定義為DECIMAL(xx,2)保留兩位小數。 CREATE TA