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

18 篇文章 0 订阅
4 篇文章 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)))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值