本来想试试那个ELFHash算法的功力的,哪知道错了,还是我三行的hash好。。。
#include <iostream>
#include <cstdio>
#include <string.h>
#include <map>
using namespace std;
map<int,char*> M;
int ELFHash(const char * str)
{
int hash = 0;
while(*str) hash = hash*107%10000007 + *str++;
return hash;
//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);
}
void getData(const char* buf){
char *fir,*sec;
int idx=0;
fir = (char *)malloc(11*sizeof(char));
sec = (char *)malloc(11*sizeof(char));
while((*(fir+idx++) = *buf++) != ' ');
*(fir+ --idx) = '\0';
idx = 0;
while( (*(sec+idx++) = *buf++ ) != '\0');
M[ELFHash(sec)] = fir;
}
int main(){
char buf[30];
while(gets(buf),*buf)
getData(buf);
while(gets(buf)){
int hash = ELFHash(buf);
if(M.find(hash) == M.end() )
printf("eh\n");
else printf("%s\n",M[hash]);
}
return 0;
}