好的C ++string操作库
我很抱歉flad std :: string和std :: wstring。 它们相当有限,远不是线程安全的。 性能方面,他们也不太好。 我想念简单的function:
- 将一个string分割成数组/向量/列表
- 简单直观的不区分大小写的查找和replace
- 支持i18n而不用担心string或wstring
- 转换为int,float,double
- 转换为UTF-8,UTF-16和其他编码
- 线程安全/折返
- 占地面积小,无需依赖
- 高度便携和跨平台
我发现Qt QString是有用的,也发现CBString http://bstring.sourceforge.net/bstrFAQ.shtml
任何其他build议和比较? 谢谢。
Boost的C ++stringalgorithm库有几乎所有你需要的function。
C ++string工具包(StrTk)库是一个免费的库,由C ++语言的强大的,优化的和可移植的通用string处理algorithm和程序组成。 该库被devise为易于使用和集成在现有的代码。
该库具有以下function:
- 通用string标记器和令牌迭代器
- 分割例程
- 用户指定的分隔符和拆分器策略(基于简单和正则expression式等)
- 数据和hex之间的转换以及base-64
- 就地移除和replace例程
- 通配符和globing
- 快速的2D令牌网格处理
- 可扩展的string处理模板
还有更多…
兼容的C ++编译器:
- GCC 4.0+
- 英特尔C ++编译器9.0+
- Microsoft Visual C ++ 8.0+
- Comeau C / C ++ 4.1+
资源:
- 下载: http : //www.partow.net/programming/strtk/index.html
- SVN: http : //code.google.com/p/strtk/
我不确定我是否同意。 除了引用计数(如果适用的话)之外,string实际上不应该是线程安全的。 你想要的其他大部分function都会把string变成垃圾驳船。 同样,删除依赖关系也会消除它们与stream协同工作的能力。
我build议的一件事是我们可以从不可变的string类中受益,特别是没有内存所有权或终止的string类。 我之前写过,他们可以非常有帮助。
Bstring – 虽然我从来没有尝试过自己,function集和速度在他们的网站呈现。 在您select的GPL或BSD许可下也是一个很好的自由度。
另外,这个名字表明它更好,他们怎么能说谎? 🙂
我发现wxString方便使用,它有很多function。 虽然它是一个更大的图书馆(wxWidgets)的一部分,也许只是想要使用string太大了。 当你只使用包含wxString和“less数”其他组件的wxBase时,它也可以不使用GUI组件。
编辑:这里是一个链接到文档。 它接受std :: string的标准函数,还有一些其他的函数。 当我必须parsing一些文本时,我总是发现BeforeFirst()和AfterFirst()非常方便。 这是真的很好的文件。
对于转换,你总是可以分解并使用C库cstdlib。
#include <cstlib> #include <iostream> int main() { std::string num; std::cin >> num; someFunc(atoi(num)); someOtherFunc(atof(num)); return 0; }
atoi = ascii to整数atof = ascii来浮动
至于发现,使用在头部algorithm或find_first_of(或类似的)下定义的STL函数“ find ”。 我也相信你可以用std :: string来初始化一个char的向量,但这是猜想。
我强烈build议使用ICU的UnicodeString
,因为它支持所有常见的string操作function,以及国际化的支持。
不知道什么是ICU? 这里是维基百科的摘录:
Unicode的国际组件(ICU)是一个成熟的C / C ++和用于Unicode支持,软件国际化和软件全球化的Java库的开源项目。 ICU可广泛地移植到许多操作系统和环境中。 它在所有平台上以及C,C ++和Java软件之间为应用程序提供相同的结果。 ICU项目由IBM和许多其他公司赞助,支持和使用。