VC中關於字符串處理問題小結

  在Visual C++中,對字符串的處理是編程中經常遇到的問題。筆者在實際的工作中就經常性地碰到這類問題,且常常遊走於CString、char及其相互之間轉換的情形當中,因筆者在C++方面也是剛剛起步,對字符串的處理還真給筆者出了不少難題。不過,藉助MSDN及相關網絡資源,筆者對字符串的處理漸漸熟悉起來。現在此對VC中字符串的處理做一個階段小結。
  我們都知道,在C++中處理字符串可以使用CString,可以使用string,也可以使用char*。CString是Visual C++中最常用的字符串類,string爲標準模板類(STL)定義的字符串類,而char*則是C語言編程中最常用的字符串指針。在這裏筆者僅僅簡要總結一下CString和char*的基本使用,因當下較少使用string,故不再詳述。
  首先來看CString,筆者對其最經常性的一個用途就是格式化,比如將int、long、double等類型的數據轉換爲字符串類型,還有在輸出調試信息時亦經常用到,如下面的代碼所示:
  // Output the debug message CString szDebugMsg; szDebugMsg.Format(TEXT("uiSeekSizePos: %I64u, uiStartSizePos: %I64u, uiEndSizePos: %I64u"), uiSeekSizePos, uiStartSizePos, uiEndSizePos); ::OutputDebugString(szDebugMsg); 其次就是char*指針了,通常我們需要將多個char*拼接起來,這可以有多種方法,比如使用strcpy、strncpy可以通過複製的方式將多個字符串進行拼裝,或使用strcat來連接多個字符串。而若是需要按特定的格式拼裝成一個新的字符串,則可以使用sprintf函數,代碼示例如下:
  char* pchProtocolName = "rtsp"; char* pchIPAddress = "172.18.10.10"; char* pchFileName = "test.mp3"; unsigned int uiPort = 3001; char* pchUrl = NULL; char const* const chUrlFmt = "%s://%s:%d/%s"; unsigned uiUrlSize = strlen(chUrlFmt) + strlen(pchProtocolName) + strlen(pchIPAddress) + strlen(pchFileName) + sizeof(uiPort); pchUrl = new char[uiUrlSize]; // Write formatted data to a string. sprintf(pchUrl, chUrlFmt, pchProtocolName, pchIPAddress, uiPort, pchFileName); 本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/huangxinfeng/archive/2010/06/ 14/5671309.aspx 此外,對於字符串常需要在字符串末尾加上"\0",這時可以採用手動加入或調用c_str()。 在這裏還需要提及的就是CString與char*指針之間的轉換了。從char*指針轉換爲CString是非常簡單的,只需直接等於其即可,如:
  char* pchTest = "Hello, world!"; CString szTest; szTest = pchTest; 而從CString轉換爲char*指針的話,則可以使用Format,或進行強制轉換const char* pchTest = (LPCTSTR)szTest,或使用GetBuffer(int nMinBufLength)方法。需要注意的是寬字符的轉換問題,代碼示例如下:
  CString szMainBuffer; // Get buffer size CHAR* pszBuffer = NULL; int iByteSize = 0, iwcharSize = 0, iLastChar = 0; iwcharSize = _tcslen(szMainBuffer); iByteSize = WideCharToMultiByte( CP_ACP, // UINT CodePage, NULL, // DWORD dwFlags, szMainBuffer, // LPCWSTR lpWideCharStr, iwcharSize, // int cchWideChar, NULL, // LPSTR lpMultiByteStr, 0, // int cbMultiByte, NULL, // LPCSTR lpDefaultChar, NULL // LPBOOL lpUsedDefaultChar ); // Allocate buffer pszBuffer = new char[ iByteSize + 1 ]; iLastChar = iByteSize; memset( pszBuffer, '\0', iByteSize + 1 ); // Convert WideCharToMultiByte( CP_ACP, // UINT CodePage, NULL, // DWORD dwFlags, szMainBuffer, // LPCWSTR lpWideCharStr, iwcharSize, // int cchWideChar, pszBuffer, // LPSTR lpMultiByteStr, iByteSize, // int cbMultiByte, NULL, // LPCSTR lpDefaultChar, NULL // LPBOOL lpUsedDefaultChar ); // Force NULL-terminate pszBuffer[iLastChar] = '\0'; 總之,對於VC中,無論是字符串之間的轉換,還是字符串與其他數據類型之間的轉換,均有非常多的系統函數或API可供使用,非常方便。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章