#include<iostream>
#include<string>
#include<iterator>
using namespace std;
unsigned long elf_hash(string str)
{
unsigned long h=0,g=0;
string::iterator iter=str.begin();
while(iter!=str.end())
{
h=(h<<4)+*iter;
if((g=h&0xF0000000)!=0)
{
h^=(g>>24);
h&=~g;
}
++iter;
}
return h&~0xa0000000;
}
int main()
{
string str;
while(cin>>str)
cout<<elf_hash(str)<<endl;
cout<<"end"<<endl;
return 0;
}
这个算法在我明白了(unsigned long)h和(unsigned long)g其实相当于C++中的bitset<32>之后,一切都很明了了.之前我就不明白h,g到底是怎么实现的.
记录一下
附上一个链接: