VC中关于字符串处理问题小结
2010-06-14 20:56
633 查看
在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等类型的数据转换为字符串类型,还有在输出调试信息时亦经常用到,如下面的代码所示:
其次就是char*指针了,通常我们需要将多个char*拼接起来,这可以有多种方法,比如使用strcpy、strncpy可以通过复制的方式将多个字符串进行拼装,或使用strcat来连接多个字符串。而若是需要按特定的格式拼装成一个新的字符串,则可以使用sprintf函数,代码示例如下:
此外,对于字符串常需要在字符串末尾加上“/0”,这时可以采用手动加入或调用c_str()。
在这里还需要提及的就是CString与char*指针之间的转换了。从char*指针转换为CString是非常简单的,只需直接等于其即可,如:
而从CString转换为char*指针的话,则可以使用Format,或进行强制转换const char* pchTest = (LPCTSTR)szTest,或使用GetBuffer(int nMinBufLength)方法。需要注意的是宽字符的转换问题,代码示例如下:
总之,对于VC中,无论是字符串之间的转换,还是字符串与其他数据类型之间的转换,均有非常多的系统函数或API可供使用,非常方便。
我们都知道,在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可供使用,非常方便。
相关文章推荐
- 关于utf8字符串处理,字符串截取乱码问题
- VC++中字符串编码处理的一些相关问题
- 针对牛客网刷题关于重复字符串处理的问题
- 关于Java中split方法对空字符串处理问题
- 关于String字符串空格的处理[用(char)12288解决空格问题]
- 关于cgic字符串的处理问题
- 关于使用ODBC+VC操作DBF文件问题小结
- 关于Oracle存储过程中的IN子句传参的问题(不能直接传字符串,需要处理)
- vc中关于屏幕闪烁问题解决的小结
- 工作中遇到的关于C#字符串处理小问题。《记录经验》
- 通过读写文本文件小结“关于python处理中文编码的问题”
- Spring关于使用注解@Configuration去配置FormattingConversionServiceFactoryBean来实现自定义格式字符串处理无效的问题(未找到是什么原因造成的)
- 关于对字符串、数组处理的常见问题与方法,如获取带有空格字符串长度,数组长度等。getline(),sprintf()使用。
- 关于C语言字符串Dddi DdD的一些问题处理
- 关于pascal语言字符串处理的问题
- 批处理关于截取变量中字符串(字段)问题的详细说明(转)
- istringstream用法 关于字符串处理的问题
- 关于字符串处理的经典问题
- 批处理关于截取变量中字符串(字段)问题的详细说明
- cocos2dx中使用的tolua关于字符串处理的一个问题