Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверка хэша 
V
    Опции темы
vorovaika
Дата 24.5.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.12.2007

Репутация: нет
Всего: нет



помогите пожалуйста. эта программа ищет в текстовом файле введенные с клавы фамилию имя и отчество(одновременно все 3) и выводит их количество...не могу сделать проверку...то есть если ввести Ivanvo  он все равно найдет Ivanov!! так как хэш побуквенный.Как сделать проверку уже найденных Фамилии имя отчества?спасибо

Код

#define _CRT_SECURE_NO_DEPRECATE
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"
#include <iostream>
using namespace std;
int main()
{    int nom=1,i=0,j,h=0,p,k=0,a,hash,n=0,kol=0,arr[1000];
    char s[50],m[30],mass[1000],sur[30],nam[30],pat[30],array[100] = " ";
FILE *F;
if((F=fopen("hash.txt","r"))==0)                    
{  printf("Fail ne otkrit!!!"); 
   return 0;}
printf("DANNIE IZ FAILA:\n");     
while(!feof(F))                            
    {fgets(s,50,F);
SetConsoleTextAttribute(hStdout, 10);
    printf("%2d) %s",nom,s);
    p=0;
    while (s[p])
    {mass[i]=(int)s[p];
    i++;
    p++;}
    nom++;}
//hash faila
for (i=0;mass[i] >0;i++)
{if (mass[i]!=10) 
{if(mass[i]!=32)
{arr[h]=k+mass[i];
k=arr[h];}}
else
    {h++;
    k=0;}}

printf ("\nHASH TABLITSA:\n");
    for (h=0; h < nom-1; h++)
    printf ("%2d) %i \n",h+1,arr[h]);
    printf("\n");
    printf ("Vvedite Familiuy, Imya, Otchestvo cherez probel...\n");
    scanf ("%s %s %s", sur, nam, pat);
    //hash
    for (j=0; j < strlen(sur); j++)
    {hash=n+(int)sur[j];
    n=hash;}
    for (j=0; j < strlen(nam); j++)
    {hash=n+(int)nam[j];
    n=hash;}
    for (j=0; j < strlen(pat); j++)
    {hash=n+(int)pat[j];
    n=hash;}
    //poisk
    for(h=0,a=0; arr[h]>0; h++)
    {if (hash == arr[h])
        {m[a]=h;
        a++;
        kol++;}}

    if(kol!=0)
    {
        {nom++;    
printf("\nNAIDENO!!!\n");
printf("\nKolichestvo naidennix - %d.\n",kol);
printf("Ix hash - %i\n", hash);}
    }
 else if (kol==0)
    {printf("\nNe naideno v dannom faile\n");}
    printf("Press any key to exit...\n");  
    _getch();
    return 0;
}


PM MAIL   Вверх
jonie
Дата 24.5.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



суммирование это слабая хеш функция. используйте либо сильные хеш функции (но и они не дадут 100% гарантии, т.е. размерность пространства значений, вычисленных ими, много меньше, чем количество возможных вариаций, т.о. биективного отображения не будет), либо откажитесь от них вообще, и проверяйте побайтно.

про хеш функции можно спросить у гугла...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0722 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.