C中一些常用的字符串hash函数

 代码如下 复制代码
//SDBM Hash Function
unsigned int SDBMHash(char *str) 

    unsigned int hash = 0; 
    while (*str) 
    { 
        // equivalent to: hash = 65599*hash + (*str++);  
        hash = (*str++) + (hash << 6) + (hash << 16) - hash; 
    } 
    return (hash & 0x7FFFFFFF); 

 
// RS Hash Function  
unsigned int RSHash(char *str) 

    unsigned int b = 378551; 
    unsigned int a = 63689; 
    unsigned int hash = 0; 
    while (*str) 
    { 
        hash = hash * a + (*str++); 
        a *= b; 
    } 
    return (hash & 0x7FFFFFFF); 

 
// JS Hash Function  
unsigned int JSHash(char *str) 

    unsigned int hash = 1315423911; 
    while (*str) 
    { 
        hash ^= ((hash << 5) + (*str++) + (hash >> 2)); 
    } 
    return (hash & 0x7FFFFFFF); 

 
// P. J. Weinberger Hash Function  
unsigned int PJWHash(char *str) 

    unsigned int BitsInUnignedInt = (unsigned int)(sizeof(unsigned int) * 8); 
    unsigned int ThreeQuarters= (unsigned int)((BitsInUnignedInt  * 3) / 4); 
    unsigned int OneEighth= (unsigned int)(BitsInUnignedInt / 8); 
    unsigned int HighBits= (unsigned int)(0xFFFFFFFF) << (BitsInUnignedInt - OneEighth); 
    unsigned int hash= 0; 
    unsigned int test= 0; 
    while (*str) 
    { 
        hash = (hash << OneEighth) + (*str++); 
        if ((test = hash & HighBits) != 0) 
        { 
            hash = ((hash ^ (test >> ThreeQuarters)) & (~HighBits)); 
        } 
    } 
    return (hash & 0x7FFFFFFF); 

 
// ELF Hash Function  
unsigned int ELFHash(char *str) 

    unsigned int hash = 0; 
    unsigned int x= 0; 
    while (*str) 
    { 
        hash = (hash << 4) + (*str++); 
        if ((x = hash & 0xF0000000L) != 0) 
        { 
            hash ^= (x >> 24); 
            hash &= ~x; 
        } 
    } 
    return (hash & 0x7FFFFFFF); 

 
// BKDR Hash Function  
unsigned int BKDRHash(char *str) 

    unsigned int seed = 131; // 31 131 1313 13131 131313 etc..  
    unsigned int hash = 0; 
    while (*str) 
    { 
        hash = hash * seed + (*str++); 
    } 
    return (hash & 0x7FFFFFFF); 

 
// DJB Hash Function  
unsigned int DJBHash(char *str) 

    unsigned int hash = 5381; 
    while (*str) 
    { 
        hash += (hash << 5) + (*str++); 
    } 
    return (hash & 0x7FFFFFFF); 

 
// AP Hash Function  
unsigned int APHash(char *str) 

    unsigned int hash = 0; 
    int i; 
    for (i=0; *str; i++) 
    { 
        if ((i & 1) == 0) 
        { 
            hash ^= ((hash << 7) ^ (*str++) ^ (hash >> 3)); 
        } 
        else 
        { 
            hash ^= (~((hash << 11) ^ (*str++) ^ (hash >> 5))); 
        } 
    } 
    return (hash & 0x7FFFFFFF); 
}
时间: 2024-09-22 15:50:12

C中一些常用的字符串hash函数的相关文章

一些常用的字符串hash函数

 General Hash Function Source Code: unsigned int RSHash(const std::string& str) { unsigned int b = 378551; unsigned int a = 63689; unsigned int hash = 0; for(std::size_t i = 0; i < str.length(); i++) { hash = hash * a + str[i]; a = a * b; } return

PHP开发中常用的字符串操作函数

1,拼接字符串 拼接字符串是最常用到的字符串操作之一,在PHP中支持三种方式对字符串进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号.=来进行操作,圆点等号可以把一个比较长的字符串分解为几行进行定义,这样做是比较有好处的. 2,替换字符串 在PHP这门语言中,提供了一个名字叫做substr_replace()的函数,该函数的作用可以快速的完成扫描和编辑文本内容较多的字符串替换功能.他的语法格式: mixed substr_replace(mixed $string,string $repl

PHP开发中常用的字符串操作函数_php技巧

1,拼接字符串 拼接字符串是最常用到的字符串操作之一,在PHP中支持三种方式对字符串进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号.=来进行操作,圆点等号可以把一个比较长的字符串分解为几行进行定义,这样做是比较有好处的. 2,替换字符串 在PHP这门语言中,提供了一个名字叫做substr_replace()的函数,该函数的作用可以快速的完成扫描和编辑文本内容较多的字符串替换功能.他的语法格式: mixed substr_replace(mixed $string,string $repl

PHP中常用的字符串格式化函数总结_php技巧

字符串的格式化就是将字符串处理为某种特定的格式.通常用户从表单中提交给服务器的数据都是字符串的形式,为了达到期望的输出效果,就需要按照一定的格式处理这些字符串后再去使用.经常见到的字符串格式化函数如下图所示: 注意:在PHP中提供的字符串函数处理的字符串,大部分都不是在原字符串上修改,而是返回一个格式化后的新字符串. 一.取出空格和字符串填补函数 空格也是一个有效的字符,在字符串中也会占据一个位置.用户在表单输入数据时,经常在无意中会多输入一些无意义的空格.因此PHP脚本在接收到通过表单处理过来

mysql常用日期 字符串处理函数命令

函数如下: left,right  字符串截取 from_unixtime  格式化unix时间戳 concat  字符串连接函数 max  取某列最大值 min 取某列最小值 sum 计算某列的和 count 统计条数 md5 返回md5加密码的串 format 格式化数字为xx,xxx,xxx.xxxx格式 比如1,1000.123 length   计算某个字符串长度 distinct  去重复 replace  替换字符串 in 指定查询某个值的记录 like  模糊查询 is null

PHP配置文件中最常用四个ini函数_php技巧

php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get.ini_set.ini_get_all.ini_restore.个人感觉最有用的就是ini_set和ini_get.  * ini_get():获取配置文件的选项值 这个函数相信很多人都使过,就是获取配置文件中某一个选项的值,如果是true值就返回1,如果是false值就返回0,字符串就返回字符串. 比如手册中的例子: <?php /* Our php.ini contains the follo

.net常用的字符串处理函数

一.字符转换函数 1.ASCII() 返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用''括起来,但含其它字符的字符串必须用''括起来使用,否则会出错. 2.CHAR() 将ASCII 码转换为字符.如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL . 3.LOWER()和UPPER() LOWER()将字符串全部转为小写:UPPER()将字符串全部转为大写. 4.STR() 把数值型数据转换为字符型数据. STR (<flo

Ruby中常用的字符串处理函数使用实例_ruby专题

1.返回字符串的长度 复制代码 代码如下: str.length => integer 2.判断字符串中是否包含另一个串 复制代码 代码如下: str.include? other_str => true or false "hello".include? "lo"   #=> true "hello".include? "ol"   #=> false "hello".includ

asp 常用的字符串处理函数

Class Cls_Fun  Private x,y,ii  ==============================  函 数 名:AlertInfo  作    用:错误显示函数  参    数:错误提示内容InfoStr,转向页面GoUrl  ==============================  Public Function AlertInfo(InfoStr,GoUrl)   If GoUrl="1" Then    Response.Write "&