Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类似于一个;“扩展”;C字符串库?_C_String - Fatal编程技术网

类似于一个;“扩展”;C字符串库?

类似于一个;“扩展”;C字符串库?,c,string,C,String,我使用过几种动态类型的语言,我一直在避免使用C语言,但“够了”就够了,它有时是适合这项工作的工具,我需要克服它 我怀念使用C语言的是关联数组和大型字符串库。有没有比string.h提供更多选项的库?在使用字符串进行转换时,有什么一般性建议吗 感谢阅读Patrick提供了许多预制的数据结构和字符串处理函数,但它是一组与“常用”函数和类型完全分离的函数和类型,并且不是一个非常轻量级的依赖项 如果C++是你任务的一个可行的替代方案,它将一个字符串类和几个通用容器捆绑成标准库(并且在Boost中可以找到

我使用过几种动态类型的语言,我一直在避免使用C语言,但“够了”就够了,它有时是适合这项工作的工具,我需要克服它

我怀念使用C语言的是关联数组和大型字符串库。有没有比string.h提供更多选项的库?在使用字符串进行转换时,有什么一般性建议吗

感谢阅读Patrick提供了许多预制的数据结构和字符串处理函数,但它是一组与“常用”函数和类型完全分离的函数和类型,并且不是一个非常轻量级的依赖项


如果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”终止的字符缓冲区
      • 改进 通用字符串的总体性能 操作
      • 函数等价性 其他更现代的语言
      图书馆是完全独立的, 可移植(已知可用于gcc/g++, MSVC++,英特尔C++,WATCOM C/C++,Turbo C,Borland C++,IBM的原生CC Windows、Linux和Mac操作系统上的编译器 十) ,高性能,易于使用和维护 不是其他收藏的一部分 数据结构的定义。甚至是文件I/O 函数是完全抽象的(所以 其他类似于流的机制, 与插座一样,也可以使用。) 然而,作为一个整体来说,这是足够的 完全替换C字符串 用于在任何应用程序中进行字符串操作的库 C程序


      你是绝对限制在C吗?C++有提升()。你所说的不是你使用不同语言的原因吗?嗨,安得烈C++吓唬我。我明白,但我想我要花好几年才能流利地掌握它-Patrick@Patrick:你必须克服这种心态,否则你将无法作为开发人员生存下来。语言是工具。没什么了。@Alan:没错,但OP说“要熟练掌握它需要几年时间”是正确的。我知道最后一段会让C语言的铁杆用户失望我认为第一段(推荐油嘴滑舌)会带来更多的C核心用户的反对票,但我会避免…:-)嗨,Alan,我其实没有什么问题要解决,只是想了解一下语言,再次感谢你,我认为创建自己的字符串(或任何数据结构)库是学习C语言最糟糕的方法。这是学习实现更高级语言的好方法,但是,如果您真的想要更高级的通用数据结构,那么您可能应该使用现有的更高级语言。C语言唯一的亮点是当你真正使用C语言习惯用法时,“高级字符串”不是C语言习惯用法。@Patrick,我希望你明白我的意思:自己动手。当你完成时,它是一个小文件。