Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- unsigned int hashf(const char *buf, size_t len);
- int main(int argc, char *argv[]) {
- unsigned int i, k, c, hash;
- if (argc < 3) {
- puts("Too few arguments!");
- return 1;
- }
- // Take the filename given as a command line parameter
- char * filename = argv[1];
- // Take the hash table size given as the second parameter
- int hash_size = atoi(argv[2]);
- char * table[hash_size];
- char * empty = " ";
- for (int m = 0; m < hash_size; m++) {
- table[m] = empty;
- }
- // char table[hash_size][100];
- char word[100];
- // Open the file
- FILE * file = fopen(filename, "r");
- if (!file) {
- puts("Couldn't open the file!");
- return 1;
- }
- else {
- int in_word = 0;
- while ((c = fgetc(file)) != EOF) {
- word[k] = c;
- if (c == ' ' || c == '\n' || c == '\t') {
- if (in_word == 1) {
- word[k] = '\0';
- char* word2 = (char*) malloc((k+1)*sizeof(char));
- strcpy(word2, word);
- hash = hashf(word2, k+1);
- printf ("word2: %s\n", word2);
- printf ("length: %d\n", k+1);
- i = 0;
- /*while (table[hash] != NULL) {
- hash += i*i;
- if (hash > hash_size) {
- i++;
- }
- else {
- printf("Error: table full");
- }
- }*/
- printf ("%u\n", hash);
- //table[hash] = word2;
- }
- k = 0;
- in_word = 0;
- }
- else if (!in_word) {
- word[k] = c;
- k++;
- in_word = 1;
- }
- }
- // Close the file
- fclose(file);
- // Print the hash table
- for (int j = 0; j < hash_size; j++) {
- printf("%s, ", table[j]);
- }
- }
- return 0;
- }
- // Given function that hashes the words
- unsigned int hashf(const char *buf, size_t len) {
- unsigned int h = 0;
- size_t i;
- for (i = 0; i < len; i++) {
- h += buf[i];
- h += h << 10;
- h ^= h >> 7;
- }
- h += h << 3;
- h ^= h >> 11;
- h += h << 15;
- return h;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement