[英]convert string to unsigned char str
我正在尝试将字符串转换为unsigned char *。 而且我一直在圈子里跑。 我的程序提示用户输入一个姓氏作为字符串。 然后我使用djb2将字符串散列为整数。 它将unsigned char *作为参数。 我的程序的目标是使用链接来创建一个哈希表来处理collisons。
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 *之间来回传递是一种糟糕的代码味道 。
修改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;
}
最好的解决方案是修改dbjc
函数,如@Steven Burnap所建议的那样。
如果你不能改变dbjc
再投cstr
以unsigned char *
在dbjc
电话:
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;
hashBucket1 = djb2((unsigned char *)cstr) % listSize; // <-- here is the change
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.