Я пытаюсь преобразовать строку в unsigned char *. И я работал в кругах. Моя программа запрашивает у пользователя последнее имя, которое я принимаю как строку. Затем я добавляю строку в целое число, используя djb2. который принимает unsigned char * в качестве параметра. Цель моей программы - создать хеш-таблицу, используя цепочку для обработки конфликтов.преобразовать строку в unsigned 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;
}
Im получаю сообщение об ошибке с выше говорил мне, что «Аргумент типа„символ *“несовместима с параметром типа„неподписанные символ *“. Любая помощь очень ценится
Прослушайте компилятором. В 'insert' вы используете' char * '. Ваша функция 'dbj2' принимает' unsigned char * '. Это разные типы. Почему бы не изменить 'dbj2' на' const string & 'и изменить' dbj2' для работы с строками? –
Или, альтернативно, вы можете изменить 'djb2', чтобы принимать аргументы типа' const char * '. Так как ваша хеш-функция не на самом деле * не изменяет * вход, вам лучше с аргументом 'const'. – Gnosophilon