How would I create a grid for a word seach Assuming I have a

How would I create a grid for a word seach? Assuming I have all the words in the dictionary. Can someone please show me some code or explain how I could go about arranging those words into collumns or row for a word search. Where I can choose the grid size, ex) 3x3 or 7x7. This is in the programing language C

Thank you

Solution

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct Dictionary buildDictionary();
struct WordGrid buildSearchGrid();
char *reverStr();
void printDictionary();
void printWordGrid();
void binaryWordSearch();
void parseGrid();

struct Dictionary{
int wordLength;
int numOfWords;
char **ppWords;
};

struct WordGrid{
int height;
int width;
char **ppGrid;
};

int main(){

int i;
int numOfCases;

FILE *pFile = fopen(\"dictionary.txt\", \"r\");;

if(pFile == NULL){
printf(\"Can not open file.\");
return 1;
}

struct Dictionary dictionary = buildDictionary(pFile, dictionary);

scanf(\"%d\", &numOfCases);
for( i = 0; i < numOfCases; i++){
printf(\"Words found in grid #%d\ \", i+1);

struct WordGrid wordGrid = buildSearchGrid(wordGrid);

parseGrid(wordGrid, dictionary);
}

return 0;
}

char* reverStr(const char *str){

size_t len = strlen(str);   
char* revStr = (char*)malloc(len + 1);

size_t dst, src;
for (dst = len - 1, src = 0; src < len; src++, dst--) {
revStr[dst] = str[src];
}
revStr[len] = \'\\0\';
return revStr;
}

void parseGrid(struct WordGrid wordGrid, struct Dictionary dictionary){

char *searchKey;
int x, y;

for( y = 0; y < wordGrid.height; y++){
searchKey = wordGrid.ppGrid[y];
binaryWordSearch(dictionary, searchKey);
}

for( y = 0; y < wordGrid.height; y++){
searchKey = reverStr(wordGrid.ppGrid[y]);
binaryWordSearch(dictionary, searchKey);
}

}

void binaryWordSearch(struct Dictionary dictionary, char *searchKey){

int first = 0;
int last = dictionary.numOfWords - 1;
int mid = (first + last) / 2;

while(first <= last){
if( strcmp(dictionary.ppWords[mid], searchKey) < 0 ){
   first = mid + 1;
}
else if( strcmp(dictionary.ppWords[mid], searchKey) == 0 ){
   printf(\"%s\ \", dictionary.ppWords[mid]);
   break;
}
else{
   last = mid - 1;
}

mid = (first + last) / 2;
}

if(first > last){
}
}

struct Dictionary buildDictionary(FILE *pFile, struct Dictionary dictionary){

dictionary.wordLength = 20;

fscanf(pFile, \"%d\", &dictionary.numOfWords);

dictionary.ppWords = malloc( dictionary.numOfWords * sizeof(char*));

for(int i = 0; i < dictionary.numOfWords; i++){
dictionary.ppWords[i] = malloc( dictionary.wordLength * sizeof(char));
fscanf(pFile, \"%s\", dictionary.ppWords[i]);
}

return dictionary;
}

struct WordGrid buildSearchGrid(struct WordGrid wordGrid){

scanf(\"%1d\", &wordGrid.height);
scanf(\"%1d\", &wordGrid.width);

wordGrid.ppGrid = malloc( wordGrid.height * sizeof(char*));

for(int x = 0; x < wordGrid.width; x++){
wordGrid.ppGrid[x] = malloc( wordGrid.width+1 * sizeof(char));
scanf(\"%s\", wordGrid.ppGrid[x]);
}

return wordGrid;
}

void printDictionary(struct Dictionary dictionary){

for(int i = 0; i < dictionary.numOfWords; i++){
printf(\"%s\ \", dictionary.ppWords[i]);
}
}

void printWordGrid(struct WordGrid wordGrid){

printf(\"%d \", wordGrid.height);
printf(\"%d\ \", wordGrid.width);

for(int i = 0; i < wordGrid.height; i++){
printf(\"%s\ \", wordGrid.ppGrid[i]);
}
}

How would I create a grid for a word seach? Assuming I have all the words in the dictionary. Can someone please show me some code or explain how I could go abou
How would I create a grid for a word seach? Assuming I have all the words in the dictionary. Can someone please show me some code or explain how I could go abou
How would I create a grid for a word seach? Assuming I have all the words in the dictionary. Can someone please show me some code or explain how I could go abou

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site