随笔 - 64, 文章 - 11, 评论 - 12, 引用 - 0
数据加载中……

C++ 字符串操作初析

       曾经有一篇关于C++程序写作的文章,文章说C++程序员要花费20%的时间来处理字符串方面的细节问题,甚至更多。可见C++中的字符处理是相当复杂,原因是C++中有着丰富的字符及字符串类,如STL中的string,wstring,char,wchar_t、还有windows C程序写作中PTSTR,PWSTR,PTSTR,MFC及ATL中的CString,  BSTR,_bstr_t,CComBSTR,OLESTR,还有一种随编译时是否预定义了UNICODE而被分析为具体类型的TCHAR及这些字符,或封装类的一大把函数。而我们要用的系统函数,标准库函数或其它库函数。有的要这种字符而没有提供接受其它字符的版本。这些原因也就促使了C++程序员往往要花许多的时间来处理字符串。上次和朋友聊到写代码的话题。他说一天只能写三百来行的代码。确实要写高效的,高质量的C++代码很要下一番功夫。

        在上面介绍了许多的字符串,及字符串封装类。实际上所有的这些类都最终可归结为C风格字符串,也就是字符数组。目前字符的编码方案主要有单字节字符(ANSI)编码,多字节字符(MBCS)编码,还有就是UNICODE编码。前两种字符编码的字符还都是用char这个数据类型来维护。当是多字节时典型的就是2个字节时,就会用2个char来存储,一个字节时就会用一个char来存储。这就是串中的字符占多少个字节得看具体的字符,不能像原来一样一个一个地数就可以知道会占多少个字节。UNICODE则简化了这种编码方案,让每个字符都占用相同大小的字节,UNICODE 中的字符是用wchar_t来定义的,这中编码方案则是每个字符都占用两个字节。在这种编码方案下我们又可以一个一个地数来算出占用了多少字节,计算机可以用一种统计方式来处理这种字符串了。虽然牺牲了些内存,但换取了逻辑的简单性。

        这里我写了几个工具函数,可以方便地在各种数据类型之间进行转换。我认为这几个函数会对处理字符串提供帮助,所在我就在首页发表了。大家有什么好的想法可以回复我。另我这两天会封装MSXML来操作XML,希望大家能给点意见。到时我可以与相关参与的人员共享这个封装。

posted on 2008-07-11 23:07 Robertxiao 阅读(3717) 评论(7)  编辑 收藏 引用 所属分类: C++

评论

# re: C++ 字符串操作初析[未登录]  回复  更多评论   

WideCharToMultiByte
MultiByteToWideChar
包装了这两个API,挺好,
2008-07-11 23:46 | gohan

# re: C++ 字符串操作初析  回复  更多评论   

楼主所言极是,确实在字符串处理方面有点伤神,有时一个项目用到了几个第三方库,常常由于函数接口的字符串类型不一致,需进行调整扩展。
2008-07-12 07:31 | 路缘

# re: C++ 字符串操作初析  回复  更多评论   

我现在就用wstring和string两种东西。。。其他的基本不用了。
那点效率我也不大稀罕的。
至于XML,何必用MSXML,普通的DOM用TinyXML就很好了。
如果你要支持DTD或者XML Schema这样的除外。
2008-07-12 12:39 | 空明流转

# re: C++ 字符串操作初析  回复  更多评论   

推荐开源c++ 库,http://pocoproject.org/,里面对std::string 进行了一些扩展,个人觉得不错
2008-07-12 15:11 | lotus

# re: C++ 字符串操作初析  回复  更多评论   

有些很强大地string类...
2008-07-13 01:23 | 逍遥剑客

# re: C++ 字符串操作初析  回复  更多评论   

boost 有专门的字符串处理库
2008-07-13 15:38 | teli

# re: C++ 字符串操作初析  回复  更多评论   

这种方法我也写过,博主写的不错,现在我更感兴趣的是string和wstring之间的直接转换,呵呵,,不想用API来做,博主写一个??
2008-07-14 08:26 | 紫夜苍狼

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理