Stránka 1 z 1

Pomoc s převodem hash tab. z char na int

Napsal: 06 kvě 2011 12:05
od derata
Ahoj, mám vytvořenou hash tabulku která pracuje s řetězci char. Chci ji využít na výpočet entropie, tak že do ní budu vkládat slova ze souboru. Jelikože nejsem schopný do funkce Insert() dostat z toho dokumentu slovo jako char tak chci aspoň pomocí soubor.get() vkládat do insert znaky a vše co není znak by značilo konec slova. Takže bych dostal něco typu 979797 v ascii. Ale nevím si rady jak tu hash tabulku upravit aby přijímala int. Přepsat char na int nestačí :D :D napíše to: 'InsertHash' : cannot convert parameter 1 from 'const char [10]' to 'int *'

Kód: Vybrat vše

#include <stdio.h>
#include <string.h>
#include "list"
#include <stdlib.h>

class List
{
   private:
      struct ListItems
      {
         char* data;
         ListItems* next;
         ListItems* prev;
      };
      ListItems* head;

   public:
      List();
      bool Search(char* x);
      void Insert(char* x);
};

List::List()
{
   head = NULL;
}

bool List::Search(char *x)
{
   ListItems* p;
   for (p = head; p != NULL; p = p->next)
      if (p->data == x)
         return true;

   return false;
}

void List::Insert(char *x)
{
   ListItems* p;
   p = new ListItems;
   p->data = x;
   p->next = head;
   if (head != NULL)
      head->prev = p;
   head = p;
   p->prev = NULL;
}

/*
   Ukazka, jak implementovat hashovani se separatnim retezenim
   Program k clanku pro Linuxsoft
   Autor: Petr Sklenicka
*/

int Hash(char* data);
void InsertHash(char* data);
bool SearchHash(char* data);

const int n = 50;            // velikost tabulky
List HashTable[n];            // hashovaci tabulka

int main()
{
   // ukazka ulozeni a nasledneho vyhledani zaznamu

   
   InsertHash("some test");
   bool p = SearchHash("some test");
   p == true ? printf("Nalezeno\n") : printf("Nenalezeno\n");

   return 0;
}

int Hash(char* data)
{
   int i, hashKey;

   for (int i = hashKey = 0; i < 10; i++)
      hashKey = (3 * hashKey + data[i]) % n;
   
   return hashKey;
}

void InsertHash(char* data)
{
   int hashKey = Hash(data);
   HashTable[hashKey].Insert(data);
}

bool SearchHash(char* data)
{
   int hashKey = Hash(data);
   return HashTable[hashKey].Search(data);
}