Что может исправить ошибку for-l oop, которую выдает функция ha sh? - PullRequest
0 голосов
/ 06 апреля 2020

Я делаю мультипликативную строку с функцией ha sh, и мой for-l oop выдает ошибку. Я пытаюсь перебрать каждый символ в строковом значении, используя его длину.

Ошибка: hashtable.cpp:29:20: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare] for (int i = 0; i < key.length(); i++)

Ха sh Функция:

int HashTable::Hash(string key)
{
    int hash = 5381; //initial value

    for (int i = 0; i < key.length(); i++)  //line that is causing error
    {
        hash = (hash * 33) + (int)key[i];

    }               

    return hash % size;

}

Есть ли другой способ написать мое условие условие, чтобы избежать этой ошибки?

1 Ответ

2 голосов
/ 06 апреля 2020

length() возвращает size_t, что без знака. Смешивание со знаком (i) и без знака (key.length()) проблематично c, так что вот в чем ошибка.

Вы можете:

  • использовать std::size_t i
  • использовать static_cast<int>(key.length())
  • еще лучше использовать диапазон для for (auto ch : key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...