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可供使用,非常方便。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏雪无痕大黄蜂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值