хэш-функция слова на С++

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Adolphina
Сообщения: 2
Зарегистрирован: 25 май 2017, 20:12

25 май 2017, 20:20

Доброго времени суток.
Только начала изучать хеширования, надо сдать лабу, где с помощью кода ANSII исчисляется хэш-функция слова. Написала такой кусок кода, но он выводит только код одной буквы.
Вопрос:
1) как с помощью добавления вычислить хэш всего слова(сумма хеш-функций каждой буквы = хэш-функции слова)
2) как сделать так, чтобы слово вводилось с клавиатуры (вместо qwerty)
Вот сам несчастный код:

Код: Выделить всё

int main (void)
   {
 char *s="qwerty";
 while(*s!='\0')
  {

	printf("%c --> %d\n",*s,*s);
	s++;
  }

	system ("PAUSE") ;
   }
Не судите строго.
Спасибо за ответы!
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

26 май 2017, 00:30

Код: Выделить всё

void main()
{
   char buff[100];
   scanf("%s", buff);

   for (char* p = buff; *p != '\0'; ++p)
   {
      printf("%c --> %d\n", *p, *p);
   }

   system("pause") ;
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Adolphina
Сообщения: 2
Зарегистрирован: 25 май 2017, 20:12

26 май 2017, 17:49

Romeo писал(а):

Код: Выделить всё

void main()
{
   char buff[100];
   scanf("%s", buff);

   for (char* p = buff; *p != '\0'; ++p)
   {
      printf("%c --> %d\n", *p, *p);
   }

   system("pause") ;
}

Спасибо большое.
Но при запуске Вашей программы я все равно получаю хэш отдельной функции, а не всего слова.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

26 май 2017, 18:13

Я помог только со вторым пунктом. Сложность первого пункта я вообще не могу понять. Не получается просто сложить числа в цикле?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

29 май 2017, 12:24

Цитата: "кода ANSII" - нет кода ANSI, есть код ASCII и разные кодовые страницы.
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

29 май 2017, 13:10

Я предположил, что хеш-код - это просто сумма ASCII-кодов символов и вот что получилось: :D

Код: Выделить всё

//---------------------------------------------------------------------------
#include <vcl>
#include <iostream>
#include <conio>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;

int main(int argc, char* argv[])
{
char buff[100], *s = "Qwerty\0", *p;
scanf("%s", buff);
int Sum = 0;

for(p = buff; *p != '\0'; ++p)
{
    printf("%c --> %d\n", *p, *p);
    Sum += *p;
}
cout << "\nSum = " << Sum;

getch();
return 0;
}
//---------------------------------------------------------------------------
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

29 май 2017, 15:57

Слива писал(а):Я предположил, что хеш-код - это просто сумма ASCII-кодов символов и вот что получилось: :D

Код: Выделить всё

//---------------------------------------------------------------------------
#include <vcl>
Для такого хеша я даже вручную быстро взломаю коллизию.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

29 май 2017, 20:14

Ну вообще-то хеш-коды разные бывают и надо точно писать какой алгоритм хеш-кода. Цитата: "сумма хеш-функций каждой буквы = хэш-функции слова", я предположил, что хеш-код здесь просто сумма, причем тут взлом вообще, CRC, например, просто применяется для проверки отосланных данных из одного места в другое и ни о каком взломе здесь не может быть и речи. О каком взломе Вы говорите?! Я абсолютно не понимаю!
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

29 май 2017, 20:27

Я тоже не понял при чём тут "взлом". Хотя, если честно, я очень часто не понимаю Сиониста, так что ничего удивительного.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить