好的C ++字符串操作库

时间:2009-07-09 02:47:47

标签: c++ string

我很抱歉火焰std :: string和std :: wstring。它们非常有限,远非线程安全。性能方面,他们也不是那么好。我想念简单的功能:

  1. 将字符串拆分为数组/向量/列表
  2. 简单&直观的不区分大小写的发现&取代
  3. 支持i18n而不用担心字符串或wstring
  4. 转换为int,float,double
  5. 转换为UTF-8,UTF-16&其他编码
  6. 线程安全/折返
  7. 占地面积小&没有依赖
  8. 高度便携&跨平台的
  9. 我发现Qt QString很有用,也找到了CBString http://bstring.sourceforge.net/bstrFAQ.shtml

    任何其他建议&比较?谢谢。

7 个答案:

答案 0 :(得分:26)

C ++ String Toolkit(StrTk)库是一个免费的库,包含用于C ++语言的强大,优化和可移植的通用字符串处理算法和过程。该库旨在易于使用并集成在现有代码中。

该库具有以下功能:

  • 通用字符串标记生成器和标记迭代器
  • 拆分例程
  • 用户指定的分隔符和拆分器策略(简单和基于正则表达式等)
  • 数据与十六进制和base-64之间的转换
  • 就地删除和替换例程
  • 外卡匹配和全球
  • 快速2D令牌网格处理
  • 可扩展字符串处理模板

还有更多......

兼容的C ++编译器:

  • GCC 4.0 +
  • 英特尔C ++编译器9.0 +
  • Microsoft Visual C ++ 8.0 +
  • Comeau C / C ++ 4.1+

来源:

答案 1 :(得分:10)

我不确定我是否同意。由于开销,字符串确实不应该是线程安全的,除非引用计数(如果适用)。您想要的大多数其他功能会将字符串转换为垃圾驳船。同样,删除依赖项将会消除它们与流良好协作的能力。

我建议的一件事是我们可以从不可变的字符串类中受益,特别是没有内存所有权或终止的字符串类。我之前写过这些文章并且非常有帮助。

答案 2 :(得分:10)

来自C++ String Algorithms LibraryBoost几乎拥有您需要的所有功能。

答案 3 :(得分:3)

Bstring - 虽然我自己从未尝试过,但在他们的网站上提供了功能集和速度。根据您选择的GPL或BSD许可证也是一个很好的自由度。

此外,这个名字表明它更好,所以它们怎么能说谎? :)

答案 4 :(得分:2)

我发现wxString方便使用,它有很多功能。虽然它是更大的库(wxWidgets)的一部分,但是当你只想使用字符串时可能太大了。 当你只使用包含wxString和'少数'其他组件的wxBase时,它也可以在没有GUI组件的情况下工作。

编辑:这是文档的link。它接受std :: string的标准函数以及其他一些函数。当我必须解析一些文本时,我总是发现BeforeFirst()和AfterFirst()非常方便。它的确有很好的记录。

答案 5 :(得分:2)

我强烈建议您使用ICU' UnicodeString,因为它支持所有常见的字符串操作功能,以及i18n支持。

不知道ICU是什么?以下是Wikipedia的摘录:

  

Unicode的国际组件(ICU)是成熟的C / C ++和Java库的开源项目,用于Unicode支持,软件国际化和软件全球化。 ICU可广泛移植到许多操作系统和环境中。它为应用程序在所有平台上以及C,C ++和Java软件之间提供相同的结果。 ICU项目由IBM和许多其他公司赞助,支持和使用。

答案 6 :(得分:1)

对于转换,您始终可以分解并使用C库cstdlib。

#include <cstlib>
#include <iostream>

int main()
{
   std::string num;

   std::cin >> num;

   someFunc(atoi(num));
   someOtherFunc(atof(num));
   return 0;
}

atoi = ascii到整数 atof = ascii to float

对于find,使用在头算法下定义的STL函数“find”,或find_first_of(或类似)。我也相信你可以使用std :: string初始化一个char的向量,但这是猜想。