`
wangangie7
  • 浏览: 36605 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

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可供使用,非常方便。
分享到:
评论

相关推荐

    C语言程序设计标准教程

     本程序中用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。用scanf函数动态地输入sex和score成员值,然后把boy1的所有成员的值整体赋予boy2。最后分别输出boy2 的各个成员值。本例表示了结构变量的...

    VC++常用功能实例

    ◆怎样才能在VC里产生一个唯一的字符串◆ 31 ◆如何隐藏进程(在系统状态栏和进程列表里不可见)◆ 31 ◆如何得到一个确定大小的视?◆ 31 ◆如何实现点击窗口任意地方拖动窗口?◆ 32 ◆如何在启动时阻止MDI应用程序...

    Visual C++/Turbo C串口通信编程实践 及源代码-1

    4.6.4 小结 141 4.6.5 在ctermview类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手v2.2编程 147 5.1 建立scomm程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与...

    windows驱动开发技术详解-part2

     3.3.5 VC编译小结  3.4 查看调试信息  3.4.1 打印调试语句  3.4.2 查看调试语句  3.5 手动加载NT式驱动  3.6 编写程序加载NT式驱动  3.6.1 SCM组件和Windows服务  3.6.2 加载NT驱动的代码  3.6.3 ...

    Windows驱动开发技术详解的光盘-part1

     3.3.5 VC编译小结  3.4 查看调试信息  3.4.1 打印调试语句  3.4.2 查看调试语句  3.5 手动加载NT式驱动  3.6 编写程序加载NT式驱动  3.6.1 SCM组件和Windows服务  3.6.2 加载NT驱动的代码  3.6.3 ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    last login:Tue ,Nov 18 10:00:55 on vc/1 上面显示的是登录星期、月、日、时间和使用的虚拟控制台。 4.应用技巧 Linux 是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许一个用户进行多次登录。这...

    Visual C++/Turbo C串口通信编程实践及源代码-3

    4.6.4 小结 141 4.6.5 在ctermview类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手v2.2编程 147 5.1 建立scomm程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 第二版 电子版

    4.6.4 小结 141 4.6.5 在CTermView类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手V2.2编程 147 5.1 建立SCOMM程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与接收...

    Visual C++/Turbo C串口通信编程实践及源代码-2

    4.6.4 小结 141 4.6.5 在ctermview类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手v2.2编程 147 5.1 建立scomm程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 源码光盘

    4.6.4 小结 141 4.6.5 在CTermView类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手V2.2编程 147 5.1 建立SCOMM程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与接收...

    VC++2010权威开发指南+源代码

     5.21.3 在日期和时间选择器控件中使用自定义格式字符串 254  5.21.4 在日期和时间选择器控件中使用回调字段 254  5.21.5 处理日期和时间选择器控件中的通知消息 256  5.22 Visual C++ 2010 Month Canlendar控件...

    Tinyxml 源代码(VC6 & VS2005)

    老版本的TinyXML“保留”了字符实体,而在新版本中它们会被转化成字符串。 另外,所有字符都可以用它的Unicode编码数字来指定, " "和" "都表示不可分的空格字符。 打印 TinyXML有几种不同的方式来打印输出,...

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    VC++常用的共用函数100多页

    ◆怎样才能在VC里产生一个唯一的字符串◆ 31 ◆如何隐藏进程(在系统状态栏和进程列表里不可见)◆ 31 ◆如何得到一个确定大小的视?◆ 31 ◆如何实现点击窗口任意地方拖动窗口?◆ 32 ◆如何在启动时阻止MDI应用程序...

    VC++ 专家指导.doc

    (72)为什么DLL在字符串表中找不到字符串 157 (73)关于复选框的文本颜色 158 (74)系列化与版本的问题 159 (75)在一个控件内检测并使用ON_COMMAND消息 162 (76)为何MDI程序中有子窗口打开时主应用程序不能关. 163 (77)...

    游戏编程指南 doc

    1.7.4 小结 22 1.8 多文件程序的结构 22 1.9 常用函数 24 第二章 如何说得更地道 28 2.1 定义和使用类 28 2.2 类的构造函数 31 2.3 类的静态成员 32 2.4 运算符重载 33 2.5 类的继承 36 2.6 虚函数和抽象类 ...

    VISUAL C MFC扩展编程实例与源码

    Visual c++ MFC扩展编程实例及源代码,非常经典的学习教材 ...15.5 实例64:二进制字符串 352 15.6 实例65:重新启动计算机 356 15.7 实例66:获得可用磁盘空间 357 15.8 实例67:闪烁窗口和文本 358

Global site tag (gtag.js) - Google Analytics