All pastes #259026 Raw Edit

Anonymous

public text v1 · immutable
#259026 ·published 2006-11-27 00:57 UTC
rendered paste body
// APS105 Labi8 12/26/06
// Geoffrey Lang
// 995155772
// langgeof@ecf.utoronto.ca

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

const int MAX_WORDS = 10000;
const int MAX_WORD_LENGTH = 25;

struct WordListNode
{
        char *word;
        int count;
        WordListNode *next;
};

void readWords(WordListNode *head, ifstream &inFile, int& n);
void removePunctuation(char word[]);
bool goodLetter(char i);
void printWords(WordListNode *head);
void printInfo(int n, int u);

int main(int argc, char *argv[])
{
        int n = 0, u = 0;                       // n - total words
        WordListNode head;                      // u - unique words

        if(argc == 2)
        {
                ifstream inFile;
                inFile.open(argv[1]);

                if(!inFile.fail())
                {
                readWords(&head, inFile, n);
                printWords(&head);
                printInfo(n, u);
                }
        }
        else
        {
                cout << "Correct usage: " << argv[0] << " filename" << endl;
        }

        return 0;
}

void readWords(WordListNode *head, ifstream &inFile,int &n)
{
        WordListNode *i = head;

        while(!inFile.eof())
        {
                char current[MAX_WORD_LENGTH + 1];

                inFile >> current;

                removePunctuation(current);

                if(strlen(current) > 0 && !inFile.eof())
                {
                i -> word = new char[strlen(current) + 1];
                strcpy(i -> word, current);
                i -> next = new WordListNode;
                i = i -> next;
                n++;
                }
        }

        i->next = NULL;
}


void removePunctuation(char word[])
{
        char temp[MAX_WORD_LENGTH];
        int i = 0, j = 0, k;

        strncpy(temp, word, MAX_WORD_LENGTH);

        while(temp[i] != '\0' && !goodLetter(temp[i]))
        {
                i++;
        }

        k = i;
        word[0] = '\0';

        while(temp[i] != '\0')
        {
                word[j] = tolower(temp[i]);
                if(goodLetter(temp[i]))
                {
                        k = j;
                }
                i++;
                j++;
        }
        word[k+1] = '\0';
}

bool goodLetter(char i)
{
        if((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9'))
        {
                return 1;
        }
        else
        {
                return 0;
        }
}

void printWords(WordListNode *head)
{
        WordListNode *i;
        for(i = head; i != NULL; i = i -> next)
        {
                cout << i -> word << " (" << i -> count << ")" << endl;
        }
}

void printInfo(int n,int u)
{
        cout << "Words processed:\t" << n << "." << endl;
        cout << "Unique words:\t" << u << "." << endl;
}