2015-09-28 3 views
0

Мне нужно создать хеш-функцию, которая должна возвращать сумму значений значений ASCII mod на 100 (что HASH_TABLE_SIZE) в данном символе, но я, похоже, не являюсь получив правильный результат. Как это исправить?Вычисление суммы значений ascii для char

int string_set::hash_function(const char *s) { 

int h = 0; 
for (int i =0; i < *s; i++) 
{ 
    h = h + int(s[i]); 
    return h % HASH_TABLE_SIZE; 
} 
return h; 
} 
+1

Что такое * «правильный» выход? – owacoder

+1

Что означает этот 'i <* s'? –

+0

например hash_function ("a") должен возвращать 97, а hash_function ("ab") вернется 95 – ProgrammingNoob

ответ

1

Не return в середине процесса.

Попробуйте это:

int string_set::hash_function(const char *s) { 

    int h = 0; 
    for (int i =0; s[i] != '\0'; i++) // the loop condition didn't seem good 
    { 
     // the cast to unsigned char may be needed for system in which the type char is signed 
     h = (h + (unsigned char)s[i]) % HASH_TABLE_SIZE; 
    } 
    return h; 
} 

Этот код будет работать хорошо, только если система использует ASCII-код в качестве символа кода для char.

+0

Листинг 'int' является избыточным, целые акции делают такое же преобразование в любом случае –

+0

Спасибо, это отлично работает для меня! – ProgrammingNoob

Смежные вопросы