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 *'
#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);
}