我想将字符串转换为无符号字符*。我一直在圈子里跑。我的程序提示用户输入一个字符串的姓。然后我使用djb2将字符串散列为一个整数。它将一个无符号的char *作为参数。我的程序的目标是使用链接创建一个哈希表来处理碰撞。将字符串转换为无符号字符str
unsigned long djb2(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
我的代码如下大气压。
void insert(LinkedList<Person>* HashList1[], LinkedList<Person>* HashList2[], int listSize)
{
char * cstr;
string str;
cin >> str;
cstr = new char [str.size()+1];
strcpy (cstr, str.c_str());
int hashBucket1 = djb2(cstr) % listSize;
}
即时得到与上面告诉我的char *“的类型参数‘’是类型的参数不兼容的‘无符号字符*’的错误。任何帮助是极大的赞赏
听编译器。在'insert'中你使用'char *'。你的'dbj2'函数需要一个'unsigned char *'。这些是不同的类型。为什么不改变'dbj2'来使用'const string&'并修改'dbj2'来对字符串进行操作? –
或者,您也可以将'djb2'改为接受'const char *'类型的参数。由于你的散列函数实际上并没有修改输入,所以你最好使用'const'参数。 – Gnosophilon