
Patrick B. answered 04/04/20
Math and computer tutor/teacher
using namespace std;
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define MAX_WORD_LENGTH (255)
typedef struct _TSynonym
{
char sourceWord[MAX_WORD_LENGTH];
char replaceWord[MAX_WORD_LENGTH];
} * TSynonym;
#define SYNONYM_SIZE (sizeof(struct _TSynonym))
typedef struct _TWordList
{
TSynonym synonyms;
int count;
} * TWordList;
typedef struct _TWord
{
char word[MAX_WORD_LENGTH];
int wordSize;
} * TWord;
#define WORD_SIZE ( sizeof(struct _TWord))
//returns the index if found, -1 otherwise
int FindWordInWordList(TWordList wordList, char * wordToFind)
{
int iReturn = -1;
int n = wordList->count;
for (int iLoop=0; iLoop<n; iLoop++)
{
if (strcmp(wordList->synonyms[iLoop].sourceWord,wordToFind)==0)
{
iReturn = iLoop;
break;
}
}
return(iReturn);
}
int main()
{
int numSynonyms;
int numWords;
cout << " Synonyms :>";
cin >> numSynonyms;
TSynonym synonyms = (TSynonym) malloc(numSynonyms * SYNONYM_SIZE);
for (int iLoop=0; iLoop<numSynonyms; iLoop++)
{
cin >> synonyms[iLoop].sourceWord;
cin >> synonyms[iLoop].replaceWord;
cout << " Replacing " << synonyms[iLoop].sourceWord << " with " << synonyms[iLoop].replaceWord << endl;
}
struct _TWordList wordList;
wordList.synonyms = synonyms;
wordList.count = numSynonyms;
cout << " Words :>";
cin >> numWords;
TWord words = (TWord) malloc(numWords * WORD_SIZE);
for (int iLoop=0; iLoop<numWords; iLoop++)
{
cin >> words[iLoop].word;
words[iLoop].wordSize = strlen(words[iLoop].word)+1;
cout << words[iLoop].word << endl;
int iReturn = FindWordInWordList(&wordList,words[iLoop].word);
if (iReturn>-1)
{
strcpy(words[iLoop].word,synonyms[iReturn].replaceWord);
words[iLoop].wordSize = strlen(words[iLoop].word)+1;
}
}
for (int iLoop=0; iLoop<numWords; iLoop++)
{
cout << words[iLoop].word << " ";
}
}