1. 程式人生 > >CString常用函式用法

CString常用函式用法

CString給MFC程式設計師帶來了在那個年代不敢奢望的功能,甚至在VS2005剛釋出的時候,為了應對預設UNICODE的問題,我常常使用CString避免顯式的寬字元轉換。

  在現在,好用的CString也是ATL的一部分了。其實ATL裡的CString和MFC裡的是同一個東東,如果在MFC中已經很熟悉CString了,就沒有必要更多的研究了。

  下面是我自己覺得常用的幾個操作,當然有些我以前沒用過的覺得相見恨晚的東東,我也寫進去了。

  1. //A.建構函式,CStringT提供了19個建構函式,其中一個旨在.NET平臺託管C++工程中才被編譯,我只寫幾個我覺得常用的
  2. //1.預設建構函式,生成一個""字串
  3. CString cstr1;  
  4. //2.拷貝建構函式
  5. CString cstr2(cstr1);  
  6. //3.從LPCSTR構造
  7. LPCSTR  myCStr  = "Hello CString";  
  8. CString cstr3(myCStr);  
  9. //4.從LPCWSTR構造
  10. LPCWSTR myCWStr = L"Hello CString";  
  11. CString cstr4(myCWStr);  
  12. //5.指定n個c字元構造
  13. char    mycharacter = 'x';  
  14. CString cstr5(mycharacter,10);  //構造10個x的字串
  15. //6.從指定n個w字元構造
  16. wchar_t mywcharacter    = '測'
    ;  
  17. CString cstr6(mywcharacter,5);  
  18. //7.從unsigned char(也就是MBCS)構造
  19. unsigned char*  pMbcs = NULL;  
  20. CString cstr7(pMbcs);  
  21. //8.從VARIANT構造
  22. BSTR    bstr    = SysAllocString(L"Hello World");  
  23. VARIANT var;  
  24. var.bstrVal = bstr; //var.bstrVal   = L"Hello World"cstr8的字元資訊不對。
  25. var.vt  = VT_BSTR;  
  26. SysFreeString(bstr);  
  27. CString cstr8(var);  
  28. //B.CString提供了8個賦值操作符,我只寫我覺得幾個常用的
  29. //1.CString到CString
  30. cstr8   = cstr7;  
  31. //2.c char到CString
  32. cstr8   = mycharacter;  
  33. //3.w char到CString
  34. cstr8   = mywcharacter;  
  35. //4.uc char到CString
  36. cstr8   = pMbcs;  
  37. //5.VARIANT到CString
  38. cstr8   = var;  
  39. //C.字串連線,我只寫幾個我覺得常用的
  40. //1.operator+ char
  41. cstr8   += mycharacter;  
  42. //2.operator+ unsigned char
  43. cstr8   += unsigned char('c');  
  44. //3.operator+ wchar_t
  45. cstr8   += mywcharacter;  
  46. //4.operator+ VARIANT
  47. cstr8   += var;  
  48. //CString + CString
  49. cstr8   += cstr7;  
  50. //D.大小寫轉換
  51. cstr8.MakeUpper();  //轉大寫
  52. cstr8.MakeLower();  //轉小寫
  53. //E.CString定義了比較完整的比較操作,這有==、!=、<等等
  54. //F.操作
  55. //1.查詢
  56. cstr8.Find('o');    //查詢第一個'o'
  57. cstr8.Find('o',5);  //從左起第5個查
  58. cstr8.FindOneOf(L"aeiou");  //查詢集合中的任一個
  59. cstr8.ReverseFind('o'); //反向查詢
  60. //2.裁剪
  61. cstr8.Trim();       //裁剪開始+末尾空格
  62. cstr8.Trim('o');    //裁剪左右'o'
  63. cstr8.Trim(L"aeiou");   //裁剪左右任何在集合中的字元
  64. cstr8.TrimLeft();  
  65. cstr8.TrimLeft('o');  
  66. cstr8.TrimLeft(L"aeiou");  
  67. cstr8.TrimRight();  
  68. cstr8.TrimRight('o');  
  69. cstr8.TrimRight(L"aeiou");  
  70. //3.取回目標字串中被指定字串包含的子串
  71. cstr8   = L"hello worldhello world";  
  72. cstr7   = cstr8.SpanIncluding(L"mhellohaha");  
  73. //4.取回原串,直到目標串中的任意一個字元出現
  74. cstr7   = cstr8.SpanExcluding(L"aiuw");  
  75. //5.Inert
  76. cstr8.Insert(5,L"haha");    //指定位置插入字串
  77. cstr8.Insert(6,'h');        //指定位置插入字元
  78. //6.Delete、Remove
  79. cstr8.Delete(5,2);          //從指定位置(5)刪除若干個(2)字元
  80. cstr8.Remove('o');          //移除所有'o'
  81. //7.Replace
  82. cstr8.Replace('o','a');     //把'o'替換為'a'
  83. cstr8.Replace(L"haha",L"toto"); //字串替換
  84. //9.提取子串
  85. CString cstrRet;  
  86. cstrRet = cstr8.Left(5);    //提取最左n個字元
  87. cstrRet = cstr8.Mid(10);    //從第n個字元到結尾
  88. cstrRet = cstr8.Mid(10,15); //提取指定區間字串
  89. cstrRet = cstr8.Right(11);  //最右邊n個字元
  90. //10.反轉
  91. cstr8.MakeReverse();  
  92. //11.以特定分隔符提取
  93. int refn    = 0;  
  94. cstrRet = cstr8.Tokenize(L"aeiou",refn);    //可以使用refn遞迴找到所有被分割的子串
  95. //12.載入dll或exe中的字串資源
  96. cstr8.LoadString(100);      //100為資源id,還有其他過載,略去
  97. //13.獲取環境變數
  98. cstr8.GetEnvironmentVariable(L"windir");  
  99. //14.格式化
  100. cstr8.Format(L"haha,now is%d with %s",100,L"old");  //format string 也可以是資源id
  101. //G.與BSTR的互動
  102. BSTR    bstr1   = cstr8.AllocSysString();  
  103. BSTR    bstr2   = cstr8.SetSysString(&bstr1);  
  104. SysFreeString(bstr2);