如何修复这个单词搜索程序?

我创建的程序不使用数组,而仅使用指针来解决单词搜索。程序背后的逻辑似乎很稳固,但是运行它时没有任何结果。找到单词后,程序应该使2D数组中的单词变为小写并打印出找到的单词。

我看到的问题是,当应该进行搜索后再次打印出数组时,它没有小写字符,并且也没有打印出所找到的单词。我不知道为什么会这样。

这是我的程序

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



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*));

    fptr = fopen(argv[1],"r");
    if (fptr == NULL) {
        printf("Cannot Open Puzzle File!\n");
        return 0;
    }

    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);

    fptr = fopen("states.txt","r");
    if (fptr == NULL) {
        printf("Cannot Open Words File!\n");
        return 0;
    }

    for(i=0; i<50; i++){
        *(words+i) = (char*)malloc(20 * sizeof(char));
        fgets(*(words+i),20,fptr);        
    }

    for(i=0; i<49; i++){
        *(*(words+i) + strlen(*(words+i))-2) = '\0';    
    }

    printf("Printing list of words:\n");
    for(i=0; i<50; i++){
        printf("%s\n",*(words + i));       
    }
    printf("\n");

    printf("Printing puzzle before search:\n");
    printPuzzle(block,bSize);
    printf("\n");

    searchPuzzle(block,bSize,words,50);
    printf("\n");

    printf("Printing puzzle after search:\n");
    printPuzzle(block,bSize);
    printf("\n");

    return 0;
}

void printPuzzle(char** arr,int n){
    for(int i = 0; i < n; i++){
        printf("\n");
        for(int j = 0; j < 15; j++){
            printf("%c ",*(*(arr+i)+j));
        }
    }

}

void searchPuzzle(char** arr,int n,char** list,int listSize){
    for(int i = 0; i < listSize; i++){
        for(int j = 0; j < n; j++){
            for(int k = 0; k < n; k++){
                    searchWord(j,k,n,arr,list,i);
                }
            }

        }

}


void searchWord(int j,int k,int gridsize,char** arr,int listPos){
    int wordlength = strlen(*(list+listPos));
    if(j+wordlength <= gridsize){ //Horizontal
        int i = 0;
        while(i < wordlength && *(*(arr+(j+i))+k) == *(*(list+listPos)+i)){
            i++;
        }
        if(i == wordlength){
            while(i > 0 && *(*(arr+(j+i))+k) == *(*(list+listPos)+i)){
            tolower(*(*(arr+(j+i))+k));
            i--;
            }
            for(i = 0; i < wordlength; i++)
                printf("%c",*(*(list+listPos)+i));
        }
    }

    if(k+wordlength <= gridsize){ //Vertical
        int i = 0;
        while(i < wordlength && *(*(arr+j)+(k+i)) == *(*(list+listPos)+i)){
            i++;
        }
        if(i == wordlength){
            while(i > 0 && *(*(arr+j)+(k+i)) == *(*(list+listPos)+i)){
            tolower(*(*(arr+(j+i))+k));
            i--;
            }
            for(i = 0; i < wordlength; i++){
                printf("%c",*(*(list+listPos)+i));
            }
        }
    }

    if(j+wordlength <= gridsize && k+wordlength <= gridsize){ //Diagonal
        int i = 0;
        while(i < wordlength && *(*(arr+(j+i))+k) == *(*(list+listPos)+i)){
            i++;
        }
        if(i == wordlength){
            while(i > 0 && *(*(arr+(j+i))+(k+i)) == *(*(list+listPos)+i)){
            tolower(*(*(arr+(j+i))+(k+i)));
            i--;
            }
            for(i = 0; i < wordlength; i++)
                printf("%c",*(*(list+listPos)+i));
        }
    }



}
xsj21 回答:如何修复这个单词搜索程序?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3149526.html

大家都在问