整理: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