类似于一个;“扩展”;C字符串库?
我使用过几种动态类型的语言,我一直在避免使用C语言,但“够了”就够了,它有时是适合这项工作的工具,我需要克服它 我怀念使用C语言的是关联数组和大型字符串库。有没有比string.h提供更多选项的库?在使用字符串进行转换时,有什么一般性建议吗 感谢阅读Patrick提供了许多预制的数据结构和字符串处理函数,但它是一组与“常用”函数和类型完全分离的函数和类型,并且不是一个非常轻量级的依赖项类似于一个;“扩展”;C字符串库?,c,string,C,String,我使用过几种动态类型的语言,我一直在避免使用C语言,但“够了”就够了,它有时是适合这项工作的工具,我需要克服它 我怀念使用C语言的是关联数组和大型字符串库。有没有比string.h提供更多选项的库?在使用字符串进行转换时,有什么一般性建议吗 感谢阅读Patrick提供了许多预制的数据结构和字符串处理函数,但它是一组与“常用”函数和类型完全分离的函数和类型,并且不是一个非常轻量级的依赖项 如果C++是你任务的一个可行的替代方案,它将一个字符串类和几个通用容器捆绑成标准库(并且在Boost中可以找到
如果C++是你任务的一个可行的替代方案,它将一个字符串类和几个通用容器捆绑成标准库(并且在Boost中可以找到很多其他相关的东西)。
< p>你在扩展的C字符串库中具体寻找什么? 提高C语言水平的一种方法是创建自己的C字符串库。然后让它开源,让其他人帮助完善它我通常不提倡创建自己的字符串库,但是w.r.t.C,这是学习C的一个很好的方法。我自己没有用过,但你至少应该检查一下SEI/CERT库。代码可以在中找到。C的大部分功能包括以字节序列的形式直接控制内存的能力。将字符串视为更高层次的东西有点违背语言的哲学 我建议您自己制作一个非常基本的。这将是一个启发性的经验,尤其是学习指针算术和循环
例如,了解有关strcat的信息,并设计库来解决此问题。在C中关联字符串键和结构值的关联数组包括:
- 字符串的哈希函数
- 一种具有素数个元素的数组,每个元素中都有一个链表头
- 包含指向存储键的
指针和(可选)指向每个键对应值的char*
指针的链表元素struct*
- 将其以素数数组大小的模散列
- 在该数组容器中,将其添加到链接列表中
- 将值指针指定给要添加的值
- POSIX为您提供了。
如果您真的需要更多的字符串库,那么C可能不是适合该特定工作的工具
至于哈希表,如果没有大量讨厌的宏,就无法在C中获得类型安全的哈希表。
如果您可以只存储
void
-指针,或者为每种类型的映射执行一些手动操作,那么您不应该缺少选项。编写您自己的哈希表是一件非常麻烦的事,您只需搜索Stackoverflow就可以获得哈希函数的帮助。如果你不想自己玩,[LGPL]看起来很不错。你可以看一下。网站上的描述:
更好的字符串库是
字符串数据类型的抽象
哪个优于C库
字符缓冲区字符串类型,或C++
std::字符串。在这些特征中
取得的成果有:
- 实质性缓解 缓冲区溢出/溢出问题的分析 以及由以下原因导致的其他故障: 常见C字符串的错误使用 图书馆职能
- 重要的 简化的字符串操作
- 高 性能互操作性 其他预期的源/库 “\0”终止的字符缓冲区
- 改进 通用字符串的总体性能 操作
- 函数等价性 其他更现代的语言
你是绝对限制在C吗?C++有提升()。你所说的不是你使用不同语言的原因吗?嗨,安得烈C++吓唬我。我明白,但我想我要花好几年才能流利地掌握它-Patrick@Patrick:你必须克服这种心态,否则你将无法作为开发人员生存下来。语言是工具。没什么了。@Alan:没错,但OP说“要熟练掌握它需要几年时间”是正确的。我知道最后一段会让C语言的铁杆用户失望我认为第一段(推荐油嘴滑舌)会带来更多的C核心用户的反对票,但我会避免…:-)嗨,Alan,我其实没有什么问题要解决,只是想了解一下语言,再次感谢你,我认为创建自己的字符串(或任何数据结构)库是学习C语言最糟糕的方法。这是学习实现更高级语言的好方法,但是,如果您真的想要更高级的通用数据结构,那么您可能应该使用现有的更高级语言。C语言唯一的亮点是当你真正使用C语言习惯用法时,“高级字符串”不是C语言习惯用法。@Patrick,我希望你明白我的意思:自己动手。当你完成时,它是一个小文件。