#include <stdio.h>
#include <stdlib.h>
#define ROWS 12
#define COLUMNS 12
int checkFind(int i, int j, int dir1, int dir2, char *string, int matrix[ROWS][COLUMNS]) {
int x=0;
for (x=1; x<=12; x++) {
if (*(string+x) == matrix[i+(dir1*x)][j+(dir2*x)]) {
return 0;
} else {
return 1;
}
}
}
int searchMatrix(char *string, int matrix[ROWS][COLUMNS]) {
int i=0, j=0, h=0, k=0, length=0;
while (*(string+length) != '\0') {
length++;
}
for (i=0; i<COLUMNS; i++) {
for (j=0; j<ROWS; j++) {
if (*string==matrix[j][i]) {
for (h=0; h<12; h++) {
switch (h) {
case 0: {
if (checkFind(i, j, 1, 0, string, matrix)==0) {
for (k=0; k<length; k++) {
printf("%c", *(string+k));
}
printf(" found horizontally! %d %d\n", i+1, j+1);
return 0;
}
break;
}
case 1: {
if (checkFind(i, j, 0, 1, string, matrix)==0) {
for (k=0; k<length; k++) {
printf("%c", *(string+k));
}
printf(" found vertically! %d %d\n", i+1, j+1);
return 0;
}
break;
}
}
}
}
}
}
}
void printMatrix(int matrix[ROWS][COLUMNS]) {
int i=0, j=0;
printf("\n+---+---+---+---+---+---+---+---+---+---+---+---+\n");
for (i=0; i<ROWS; i++) {
for (j=0; j<COLUMNS; j++) {
printf("| %c ", matrix[i][j]);
if (j==11) {
printf("|\n+---+---+---+---+---+---+---+---+---+---+---+---+\n");
}
}
}
}
int main(void) {
int matrix[ROWS][COLUMNS] = {{'X', 'S', 'E', 'C', 'U', 'R', 'I', 'T', 'Y', 'C', 'O', 'T'},
{'M', 'E', 'D', 'I', 'A', 'H', 'E', 'R', 'C', 'S', 'T', 'A'},
{'K', 'C', 'F', 'X', 'J', 'A', 'E', 'S', 'I', 'I', 'L', 'S'},
{'M', 'U', 'I', 'N', 'T', 'R', 'U', 'S', 'I', 'O', 'N', 'K'},
{'A', 'R', 'R', 'Z', 'F', 'W', 'N', 'K', 'I', 'G', 'V', 'Z'},
{'L', 'E', 'E', 'N', 'C', 'R', 'Y', 'P', 'T', 'I', 'O', 'N'},
{'W', 'K', 'W', 'O', 'R', 'M', 'P', 'E', 'U', 'O', 'J', 'X'},
{'A', 'V', 'A', 'M', 'D', 'N', 'D', 'P', 'J', 'H', 'A', 'L'},
{'R', 'L', 'L', 'N', 'V', 'I', 'R', 'U', 'S', 'P', 'E', 'E'},
{'E', 'W', 'L', 'D', 'D', 'E', 'X', 'O', 'L', 'T', 'P', 'U'},
{'X', 'J', 'P', 'R', 'C', 'T', 'C', 'P', 'A', 'P', 'R', 'C'},
{'G', 'K', 'B', 'U', 'F', 'F', 'E', 'R', 'S', 'L', 'T', 'B'}};
int i=0;
char string[13];
printf("Matrix Search - Available commands:\n");
printf("1 .. Enter a search string\n");
printf("9 .. Print the matrix\n");
printf("0 .. Quit the program\n");
for ( ; ; ) {
printf("\nPlease enter your command: ");
scanf("%d", &i);
if (i==0) {
exit(0);
} else if (i==9) {
printMatrix(matrix);
} else if (i==1) {
printf("Please enter search string: ");
scanf("%s", &string);
searchMatrix(string, matrix);
}
}
return 0;
}