出于某种原因,我的 searchPuzzle 函数中的打印语句不起作用。各位大佬能解释一下原因吗?我试图在 15x15 的填字游戏中找到某些单词。我试图找到的词是美国的州,例如纽约。char ** arr 代表填字游戏。而 char** 列表表示状态列表。我的功能是尝试在填字游戏中找到状态并打印出它确实找到的状态。Int listsize 的值为 50。而 n 的值为 15。
This is the cross word puzzle: WDBMJQDBCJNQPTI IRZUXUZEAOIORTN MNZPLRNHLYLXHMD MYEKAIDPIULYOWI AOABARKUFVIHLAA LONMRXKIOJNAVRN AEPTAARARTOWAIA SUCZAUSINAIALZV KOTAONRKISSIAON AHXSVKAIAEAIBNE UDSXNXCCDWGSAAV OISDWLEJNJTXMHA MOXWTNHQDXOQAQD RUUVGEORGIAQVDA VFLORIDALGLWOXN
这是州列表: 阿拉巴马 阿拉斯加 亚利桑那 阿肯色 加利福尼亚 科罗拉多 康涅狄格 特拉华 佛罗里达 乔治亚 夏威夷 爱达荷 伊利诺伊 印第安纳 爱荷华 堪萨斯 肯塔基 路易斯安那 缅因 马里兰 马萨诸塞 密歇根 明尼苏达 密西西比 密苏里 蒙大拿 内布拉斯加州 内华达 新罕布什尔 新泽西 新墨西哥 纽约 北卡罗来纳 北达科他 俄克拉荷马 俄勒冈 宾夕法尼亚 罗德岛 南卡罗来纳 南达科他 田纳西 德克萨斯犹他 佛蒙特 弗吉尼亚 华盛顿 西弗吉尼亚 威斯康星 怀俄明
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// DO NOT INCLUDE OTHER LIBRARY!
// Declarations of the two functions you will implement
// Feel free to declare any helper functions
void printPuzzle(char** arr, int n);
void searchPuzzle(char** arr, int n, char** list, int listSize);
// Main function, DO NOT MODIFY!!!
int main(int argc, char **argv) {
int bSize = 15;
if (argc != 2) {
fprintf(stderr, "Usage: %s <puzzle file name>\n", argv[0]);
return 2;
}
int i, j;
FILE *fptr;
char **block = (char**)malloc(bSize * sizeof(char*));
char **words = (char**)malloc(50 * sizeof(char*));
// Open file for reading puzzle
fptr = fopen(argv[1], "r");
if (fptr == NULL) {
printf("Cannot Open Puzzle File!\n");
return 0;
}
// Read puzzle block into 2D arrays
for(i=0; i<bSize; i++){
*(block+i) = (char*)malloc(bSize * sizeof(char));
fscanf(fptr, "%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n", *(block+i), *(block+i)+1, *(block+i)+2, *(block+i)+3, *(block+i)+4, *(block+i)+5, *(block+i)+6, *(block+i)+7, *(block+i)+8, *(block+i)+9, *(block+i)+10, *(block+i)+11, *(block+i)+12, *(block+i)+13, *(block+i)+14 );
}
fclose(fptr);
// Open file for reading word list
fptr = fopen("states.txt", "r");
if (fptr == NULL) {
printf("Cannot Open Words File!\n");
return 0;
}
// Save words into arrays
for(i=0; i<50; i++){
*(words+i) = (char*)malloc(20 * sizeof(char));
fgets(*(words+i), 20, fptr);
}
// Remove newline characters from each word (except for the last word)
for(i=0; i<49; i++){
*(*(words+i) + strlen(*(words+i))-2) = '\0';
}
// Print out word list
printf("Printing list of words:\n");
for(i=0; i<50; i++){
printf("%s\n", *(words + i));
}
printf("\n");
// Print out original puzzle grid
printf("Printing puzzle before search:\n");
printPuzzle(block, bSize);
printf("\n");
// Call searchPuzzle to find all words in the puzzle
searchPuzzle(block, bSize, words, 50);
printf("\n");
// Print out final puzzle grid with found words in lower case
printf("Printing puzzle after search:\n");
printPuzzle(block, bSize);
printf("\n");
return 0;
}
void printPuzzle(char** arr, int n){
// This function will print out the complete puzzle grid (arr). It must produce the output in the SAME format as the samples in the instructions.
// Your implementation here
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
printf("%c ", *(*(arr + i) + j));
}
printf("\n");
}
}
void searchPuzzle(char** arr, int n, char** list, int listSize){
// This function checks if arr contains words from list. If a word appears in arr, it will print out that word and then convert that word entry in arr into lower case.
// Your implementation here
for(int e = 0; e < listSize; e++){
for(int f = 0; f < strlen(*(list+e)); f++){
if(*(*(list + e) + f) >= 'a' && *(*(list + e) + f) <= 'z' ){
*(*(list + e) + f) = *(*(list + e) + f) - ('a' - 'A');
}
}
}
int k = 0;
for(int a = 0; a < listSize; a++){
for(int b = 0; b < n; b++){
for(int c = 0; c < n; c++){
if(*(*(list + a) + k) >= 'a' && *(*(list + a) + k) <= 'z' ){
*(*(list + a) + k) = *(*(list + a) + k) - ('a' - 'A');
}
if( *(*(list + a) + k) == *(*(arr + c) + b) ){
k++;
}
if( *(*(list + a) + k) != *(*(arr + c) + b) ){
k = 0;
break;
}
printf("%i ", k);
if ( k == (strlen(*(list+a))-1) ){
printf("Found: ");
for(int l = 0; l < strlen(*(list+a)); l++){
printf("%c", *(*(list + a) + l));
//printf("\n");
}
printf("\n");
k = 0;
break;
}
}
}
}
}