好的C ++string操作库

我很抱歉flad std :: string和std :: wstring。 它们相当有限,远不是线程安全的。 性能方面,他们也不太好。 我想念简单的function:

  1. 将一个string分割成数组/向量/列表
  2. 简单直观的不区分大小写的查找和replace
  3. 支持i18n而不用担心string或wstring
  4. 转换为int,float,double
  5. 转换为UTF-8,UTF-16和其他编码
  6. 线程安全/折返
  7. 占地面积小,无需依赖
  8. 高度便携和跨平台

我发现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和许多其他公司赞助,支持和使用。