如何在C或C++中进行字符串实习?

Suh*_*pta 8 c c++ string-interning

intern()在Java中有类似C或C++中的方法吗?如果没有,我怎样才能在C或C++中进行字符串实习

Yli*_*sar 17

boost::flyweight< std::string > 似乎正是你正在寻找的.

  • 更准确地说,"boost :: flyweight"使对象不可变,`[]`不会引起问题,因为`boost :: flyweight <T>`只会暴露`const T&`. (4认同)

Ste*_*n C 6

在C中有类似intern()方法的东西,就像我们在Java中一样吗?

不在标准C库中.

如果没有,如何在C中进行字符串实习?

我很害怕,很困难.第一个问题是"字符串"在C中不是一个明确定义的东西.相反,你char *可能指向一个以零结尾的字符串,或者可能只是表示一个字符位置.然后你就会遇到一些问题,即某些字符串嵌入其他东西......或存储在堆栈中.这两者都使得实习不可能和/或无意义.然后,存在这样的问题:C字符串文字不能保证以Java保证的方式实现.最后,存在的问题是实习是等待发生的存储泄漏......如果语言不是垃圾收集的话.

话虽如此,(尝试)在C中实现实习的方法是创建一个哈希表来保存实习字符串.您需要将它作为一个前提条件,除非它是文本或在其自己的堆节点中分配的字符串,否则不能实习字符串.要解决存储泄漏问题,您需要一个每字符串引用计数来检测何时可以丢弃一个内部字符串.