将字符串转换为无符号字符 str
convert string to unsigned char str
我正在尝试将字符串转换为无符号字符*。我一直在绕圈子。 我的程序提示用户输入一个姓氏,我将其作为字符串接收。 然后我使用 djb2 将字符串散列成一个整数。它采用无符号字符 * 作为参数。我的程序的目标是使用链接创建一个哈希表来处理 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 *"类型的参数与"无符号字符*"类型的参数不兼容。任何帮助都非常感谢
当您遇到这样的键入问题时,这是一个很好的迹象,表明您没有以最佳方式使用该语言。 在字符串和 C++ 字符之间来回切换是一种糟糕的代码气味。
修改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
则在dbjc
调用中将cstr
转换为unsigned char *
:
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
}
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 我可以得到一个字符 * 到一个 std::sregex_iterator 匹配 str() 吗?
- 在函数内部传递字符 *str
- 为什么在使用字符指针 str1 而不是 str 时会出现分段转储?
- 为什么不能在常量字符 * str 上应用 str.find_last_of( )
- 将 str 转换为字符*问题
- 字符 *str;str= "HELLO" ;如何在不为字符串分配任何内存的情况下工作?
- 将字符串转换为无符号字符 str
- (无符号字符)str 与 str + 0xff 或(无符号整数)值与值 + 0xffff 中的哪一种更快和首选
- 为什么你需要在新字符(str.length())上添加一个
- C++使用find(str,index)计算字符串中字符的出现次数
- 用字符而不是字节进行子str
- "str" 和常量字符之间的 c++ 重载[N]?
- 字符* str= "ab" , str 和 &str 的混淆
- 为什么我不能在 C++ 中使用 str.erase(str.begin() + index) 擦除字符串中的字符?