gpt4 book ai didi

c++ - 将字符串转换为无符号字符 str

转载 作者:行者123 更新时间:2023-11-30 02:04:22 25 4
gpt4 key购买 nike

我正在尝试将字符串转换为无符号字符 *。而我一直在兜圈子。我的程序提示用户输入我作为字符串接收的姓氏。然后我使用 djb2 将字符串散列为一个整数。它以一个 unsigned char * 作为参数。我的程序的目标是使用链接创建一个哈希表来处理碰撞。

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;
}

我的代码如下atm。

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 *”类型的参数与“unsigned char *”类型的参数不兼容。非常感谢任何帮助

最佳答案

当您遇到这样的打字问题时,这很好地表明您没有以最佳方式使用该语言。在 C++ 中的字符串和 char*s 之间来回切换是一个 bad code smell .

修改 dbjc 以使用字符串:

unsigned long djb2(const string& str)
{
unsigned long hash = 5381;

for(string::iterator it=str.begin();it!=str.end();it++)
hash = ((hash << 5) + hash) + *it; /* hash * 33 + character */

return hash;
}

这将大大简化您的插入:

void insert(LinkedList<Person>* HashList1[], LinkedList<Person>* HashList2[], int listSize){
string str;
cin >> str;
int hashBucket1;
hashBucket1 = djb2(str) % listSize;
}

关于c++ - 将字符串转换为无符号字符 str,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10768829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com