
Patrick B. answered 05/17/20
Math and computer tutor/teacher
using namespace std;
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_WORD_LEN (50)
#define MAX_NUM_WORDS (23907)
int StrCompare ( const void * rec1, const void * rec2)
{
char * str1 = (char *)rec1;
char * str2 = (char *)rec2;
return( strcmp(str1,str2));
}
char dictionary[MAX_NUM_WORDS][MAX_WORD_LEN];
void Lowercase ( char * str)
{
int n = strlen(str);
char ch;
for (int iLoop=0; iLoop<n; iLoop++)
{
ch = str[iLoop];
if (ch=='\n') { ch=0; }
str[iLoop] = tolower(ch);
}
}
int Dictionary( char dict[][MAX_WORD_LEN])
{
int i=0;
FILE * fptr = fopen("dictionary.dat","r");
for (int iLoop=0; iLoop<MAX_NUM_WORDS; iLoop++)
{
memset(dictionary[iLoop],0,MAX_WORD_LEN);
if (fgets(dictionary[iLoop],MAX_WORD_LEN,fptr) != NULL)
{
Lowercase(dictionary[iLoop]);
i++;
}
else
{
break;
}
}
fclose(fptr);
return(i);
}
int Go ( char dictionary[][MAX_WORD_LEN], int wordCount, char * filename)
{
FILE * fptr = fopen(filename,"r");
char inbuff[255];
char * token;
int lineNum=1;
while (fgets(inbuff,255,fptr)!=NULL)
{
token = strtok(inbuff," ");
while (token!=NULL)
{
Lowercase(token);
char * wordPtr= (char*)bsearch((void*)token,(void *)dictionary,wordCount,MAX_WORD_LEN,StrCompare);
if (wordPtr==NULL)
{
cout << token << " on line " << lineNum << endl;
}
token = strtok(NULL," ");
}
lineNum++;
}
fclose(fptr);
}
int main()
{
int wordcount = Dictionary(dictionary);
qsort(dictionary,wordcount,MAX_WORD_LEN,StrCompare);
//* for (int iLoop=0; iLoop<wordcount; iLoop++) { cout << dictionary[iLoop] << endl; }
Go(dictionary,wordcount,(char*) "input.dat");
}