首页 > 其他 > 详细

如何建立英文字符的哈希表

时间:2014-09-24 16:01:08      阅读:100      评论:0      收藏:0      [点我收藏+]

       经常会遇到需要建立字符串哈希表的问题,例如strtok,或者删除指定字符串的中一些字符等等,可见的字符有256个,那么很容易想到建立一个哈希表,但是其中有一些技巧,可以节省空间,其实可以使用bitmap的形式实现,但是c语言中没有现成的东西,所以需要自己实现。下面就是实现方式:

char hash[32] = {0};
do
{
    hash[*str >> 3] |=  (1 << (*str & 7));
}while(*str++)

      以上就建立了一个可以容纳256个字符的hash表,首先解释一下为什么只用32个char的数组就可以表示给256个字符打点标记,因为32个字符的数据内存上是连续的,每个字符是8个bit,所以char hash[32]总共有256和bit,也就能够表示指定的字符是否出现过。接下来就是如何置位了,*str >> 3表示 *str / 8,也就是计算该字符应该在第几个char上打点标记,*str & 7表示*str % 7,可以计算出应该在该char上的哪个bit打点标记。至于为什么用位操作实现,是因为位操作很快。

     下面是如何查找字符是否在哈希表中的代码:

if((map[*str >> 3]) &  (1<< (*str & 7)))


如何建立英文字符的哈希表

原文:http://blog.csdn.net/wdxin1322/article/details/39522293

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!