coolmel55 0 Light Poster

I need to create a function that will allow me to print a hash table below is my code. There are 5 files all together: main.cpp, hash.h, hash.cpp, rec.h, rec.cpp.

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include "Rec.h"
#include "Hash.h"

using namespace std;

int main()
{
    char filename[16];
    string myString;
    int lineNum = 0;
	CHash H1;
	CRec *rptr;

    //system("clear");
    cout << "Welcome to the hash table program!" << endl;
    cout << "********************************************" << endl;
    cout << "\nPlease enter a filename which we will build "
         << " hash table for: ";
    cin >> filename;

    fstream instream(filename);

    if(instream.fail())
    {
            cout << "Input file opening failed.\n";
            exit(1);
    }

    getline(instream, myString);
    istringstream istr(myString);

    while (!instream.eof())
    {
            lineNum++;
			rptr = new CRec;
			rptr ->set_data(lineNum, myString);
			H1.add(rptr);
            

            getline(instream, myString);
            istringstream istr(myString);

            while (istr >> myString)
            {
				lineNum++;
				rptr = new CRec;
				rptr ->set_data(lineNum, myString);
				H1.add(rptr);                     
			}

	}
   
	instream.close();

	return 0;
}

---------------new file Rec.h-------------------------------
#ifndef CREC_H
#define CREC_H
#include <string>

using namespace std;

class CHash;

class CRec 
{
	friend class CHash;

public:
	CRec();
	~CRec();
	void set_data(int, string);
	void get_data(int&, int&, string&);
	int makeKey(string s);


private:
	int key;
	int lineNum;
	string myString;
};
#endif

---------------new file Rec.cpp-------------------------------
#include "Rec.h"
#include <string>

using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CRec::CRec()
{

}

CRec::~CRec()
{

}

void CRec::set_data(int l, string s)
{
	key = makeKey(s);
	lineNum = l;
	myString = s;
}

void CRec::get_data(int &k, int &l,  string &s)
{
	k = key;
	l = lineNum;
	s = myString;
}

int CRec::makeKey(string s)
{
	int sum=0;
	int num_in_word = s.length();

	for (int i = 0; i < num_in_word; i++)
		sum = sum + s[i];

	return(sum % num_in_word);
}

---------------new file Hash.h-------------------------------
#ifndef CHASH_H
#define CHASH_H

#include "Rec.h"

//const int size = 7;

class CHash
{
public:
	CHash(); //fixed size =7 for illustration
	~CHash();
	int add(CRec *r); //hashes and stores
	CRec* get(int k); //hashes and retreives
	void output();
	void print();

private:
	CRec *tab[7]; //sttrage for records
	int used[7]; //indicates if used
	int size;
};
#endif

---------------new file Hash.cpp-------------------------------
#include "Hash.h"
#include "Rec.h"
#include <string>
#include <iostream>

using namespace std;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CHash::CHash()
{
	size=7;
	for(int x=0; x<size; x++)
		used[x]=0;
}

CHash::~CHash()
{

}

int CHash::add(CRec *r)
{
	int ret = 0; 
	int ind = r->key%size; 
	int count = 0; 
	int done = 0;

	while(count < size && !done) 
	{
		if(used[ind] == 0) 
		{
			tab[ind] = r; 
			used[ind] = 1;
			done = 1; ret = 1;
		}
		else 
		{
			ind = (ind + 1) % size; 
			count++;
		}
	}
	return ret;
}

void CHash::print()
{

}

CRec *CHash::get(int k) 
{
	CRec *ret; 	
	int ind = k % size; 
	int count = 0; 
	int done = 0;
	
	while(count < size && !done) 
	{
		if(tab[ind]->key == k) 
		{
			ret = tab[ind];
			done = 1;
		}
		else 
		{
			ind = (ind + 1) % size;
			count++;
		}
	}
	return ret;
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.