for loop — функция, возвращающая простой хэш-код в переполнении стека

Я пытаюсь выполнить следующее упражнение по программированию из моей книги по C ++: «Напишите функцию, которая принимает строку в качестве аргумента и возвращает простой хеш-код, который вычисляется путем сложения значений всех символов в строке.«

Мое решение это:

#include <iostream>
#include <string>

#define clrscr() system("cls")
#define pause() system("pause")

using namespace std;

int hashc(char string[]);

int main()
{
char phrase[256];

cout << "This program converts any string into primitve hash-code." << "\n";
cout << "Input phrase: ";   cin.getline(phrase, sizeof(phrase));
cout << "\n";

cout << "Hash-code for your phrase is: " << hashc(phrase) << "\n\n";

pause();
return(0);
}

int hashc(char string[])
{
int index;
int length;
int hash_value = 0;

length = strlen(string);

for(index = 0; index >= length; ++index)
{
hash_value = hash_value + string[index];
}return(hash_value);
}

Проблема в том, что функция всегда возвращает hash_value = 0 так как кажется, что он пропускает цикл for. Когда я вернусь length в функции он возвращает правильную длину заданной строки (которая index >= length за index = 0). Поэтому он должен нормально запускать цикл for, не так ли? Небольшая подсказка здесь очень ценится!

Ура!

2

Решение

Идиоматический цикл for должен выглядеть так:

for(index = 0; index < length; ++index)
{
hash_value += string[index];
}

Ключевые особенности в том, что индекс начинается с 0 (index = 0), индекс сравнивается с длиной «меньше» (index < length) и, как у вас есть, индекс увеличивается с помощью предварительного увеличения (++index).

2

Другие решения

for(index = 0; index < length; ++index)

В данный момент вы никогда не входите в цикл, и никакие символы не вызвали ошибку сегментации в моей системе. Он входит в цикл в единственной ситуации, когда он проходит условие (length >= index, т. е. 0> = 0), а затем зацикливается, пока не попытается получить доступ к недопустимому местоположению, и в этот момент возникает ошибка сегмента.

1

По вопросам рекламы [email protected]