一段时间后字符串打印空白

时间:2016-01-30 17:41:13

标签: c string wordsearch

所以我必须为类创建一个单词搜索程序,对于它的某些部分,它工作正常,但过了一段时间它会停止一起打印字符串。我不知道为什么......任何帮助都会很棒!

void checkWords(char** search, char** dictionary, int rows, int col){

    const int DX_SIZE =8;
    const int DX[] = {-1,-1,-1, 0,0, 1,1,1};
    const int DY[] = {-1, 0, 1,-1,1,-1,0,1};
    int X = 0;
    int Y = 0;
    int i,j,k;
    int dir=0;
    int curX = X;
    int curY = Y;
          for(j=0;j<rows;j++){
                  Y++;
          for(k=0;k<col;k++){
                  X++;
          for(dir=0;dir<DX_SIZE;dir++){
                  char word[20] = {'\0'};
          for(i=0;i<=19;i++){
                  int curX= ((X+DX[dir]*i)-1);
                  int curY=((Y+DY[dir]*i)-1);
                  if(curY>=0&&curY<rows){
                      if(curX>=0&&curX<col){
                           word[i]=search[curX][curY];
                           printf("Stage 7 curX:%d, curY:%d, i:%d dir:%d word:%s\n", curX, curY, i, dir, word);
            }
        }

       int bin=bSearch(word, dictionary, 0, words());
            if(bin==1){
               // printf("%s\n", word);
            }
          }
          }
          }
          }
}

感谢先进的任何人提供帮助!

编辑:

这里有一些示例输出:http://imgur.com/a/zo0fS 输出结果一直很好,直到它开始没有打印出来......

EDIT2: 4

4

第7阶段curX:0,curY:0,i:0 dir:0 word:b

第7阶段curX:0,curY:0,i:0 dir:1个字:b

第7阶段curX:0,curY:0,i:0 dir:2个字:b

第7阶段curX:0,curY:0,i:0 dir:3个字:b

第7阶段curX:0,curY:0,i:0 dir:4个字:b

第7阶段curX:0,curY:1,i:1 dir:4个字:bo

第7阶段curX:0,curY:2,i:2 dir:4个字:boa

阶段7 curX:0,curY:3,i:3 dir:4个字:boat

第7阶段curX:0,curY:0,i:0 dir:5个字:b

第7阶段curX:0,curY:0,i:0 dir:6字:b

第7阶段curX:1,curY:0,i:1 dir:6个字:bl

第7阶段curX:2,curY:0,i:2 dir:6个字:blc

第7阶段curX:3,curY:0,i:3 dir:6字:blcl

第7阶段curX:0,curY:0,i:0 dir:7字:b

第7阶段curX:1,curY:1,i:1 dir:7个字:bi

第7阶段curX:2,curY:2,i:2 dir:7字:bim

第7阶段curX:3,curY:3,i:3 dir:7字:bime

第7阶段curX:1,curY:0,i:0 dir:0 word:l

第7阶段curX:1,curY:0,i:0 dir:1个字:l

第7阶段curX:0,curY:0,i:1 dir:1个字:lb

第7阶段curX:1,curY:0,i:0 dir:2字:l

第7阶段curX:0,curY:1,i:1 dir:2个字:lo

第7阶段curX:1,curY:0,i:0 dir:3个字:l

第7阶段curX:1,curY:0,i:0 dir:4个字:l

第7阶段curX:1,curY:1,i:1 dir:4个字:li

第7阶段curX:1,curY:2,i:2 dir:4个字:lik

第7阶段curX:1,curY:3,i:3 dir:4个字:喜欢

第7阶段curX:1,curY:0,i:0 dir:5个字:l

第7阶段curX:1,curY:0,i:0 dir:6字:l

第7阶段curX:2,curY:0,i:1 dir:6字:lc

第7阶段curX:3,curY:0,i:2 dir:6字:lcl

第7阶段curX:1,curY:0,i:0 dir:7字:l

第7阶段curX:2,curY:1,i:1 dir:7字:la

第7阶段curX:3,curY:2,i:2 dir:7个字:lak

第7阶段curX:2,curY:0,i:0 dir:0 word:c

第7阶段curX:2,curY:0,i:0 dir:1个字:c

第7阶段curX:1,curY:0,i:1 dir:1个字:cl

第7阶段curX:0,curY:0,i:2 dir:1个字:clb

第7阶段curX:2,curY:0,i:0 dir:2个字:c

第7阶段curX:1,curY:1,i:1 dir:2个字:ci

第7阶段curX:0,curY:2,i:2 dir:2个词:cia

第7阶段curX:2,curY:0,i:0 dir:3个字:c

第7阶段curX:2,curY:0,i:0 dir:4个字:c

第7阶段curX:2,curY:1,i:1 dir:4个字:ca

第7阶段curX:2,curY:2,i:2 dir:4个字:cam

第7阶段curX:2,curY:3,i:3 dir:4个字:camp

第7阶段curX:2,curY:0,i:0 dir:5个字:c

第7阶段curX:2,curY:0,i:0 dir:6个字:c

第7阶段curX:3,curY:0,i:1 dir:6个字:cl

第7阶段curX:2,curY:0,i:0 dir:7字:c

第7阶段curX:3,curY:1,i:1 dir:7字:ci

第7阶段curX:3,curY:0,i:0 dir:0 word:l

第7阶段curX:3,curY:0,i:0 dir:1个字:l

第7阶段curX:2,curY:0,i:1 dir:1个字:lc

第7阶段curX:1,curY:0,i:2 dir:1个词:lcl

第7阶段curX:0,curY:0,i:3 dir:1个词:lclb

第7阶段curX:3,curY:0,i:0 dir:2个字:l

第7阶段curX:2,curY:1,i:1 dir:2个字:l

第7阶段curX:1,curY:2,i:2 dir:2个字:lak

第7阶段curX:0,curY:3,i:3 dir:2个字:lakt

第7阶段curX:3,curY:0,i:0 dir:3个字:l

第7阶段curX:3,curY:0,i:0 dir:4字:l

第7阶段curX:3,curY:1,i:1 dir:4个字:li

第7阶段curX:3,curY:2,i:2 dir:4个字:lik

第7阶段curX:3,curY:3,i:3 dir:4个字:喜欢

第7阶段curX:3,curY:0,i:0 dir:5个字:l

第7阶段curX:3,curY:0,i:0 dir:6字:l

第7阶段curX:3,curY:0,i:0 dir:7字:l

第7阶段curX:3,curY:0,i:1 dir:0字:

第7阶段curX:3,curY:1,i:1 dir:1个字:

第7阶段curX:2,curY:1,i:2 dir:1个字:

第7阶段curX:1,curY:1,i:3 dir:1个字:

第7阶段curX:0,curY:1,i:4 dir:1个字:

第7阶段curX:3,curY:2,i:1 dir:2个字:

第7阶段curX:2,curY:3,i:2 dir:2个字:

第7阶段curX:3,curY:1,i:2 dir:1个字:

第7阶段curX:2,curY:1,i:3 dir:1个字:

第7阶段curX:1,curY:1,i:4 dir:1个字:

第7阶段curX:0,curY:1,i:5 dir:1个字:

第7阶段curX:3,curY:3,i:2 dir:2个字:

第7阶段curX:3,curY:1,i:3 dir:1个字:

第7阶段curX:2,curY:1,i:4 dir:1个字:

第7阶段curX:1,curY:1,i:5 dir:1个字:

第7阶段curX:0,curY:1,i:6 dir:1个字:

第7阶段curX:3,curY:1,i:4 dir:1个字:

第7阶段curX:2,curY:1,i:5 dir:1个字:

第7阶段curX:1,curY:1,i:6 dir:1个字:

第7阶段curX:0,curY:1,i:7 dir:1个字:

第7阶段curX:3,curY:2,i:5 dir:1个字:

第7阶段curX:2,curY:2,i:6 dir:1个字:

第7阶段curX:1,curY:2,i:7 dir:1个字:

第7阶段curX:0,curY:2,i:8 dir:1个字:

第7阶段curX:3,curY:2,i:6 dir:1个字:

第7阶段curX:2,curY:2,i:7 dir:1个字:

第7阶段curX:1,curY:2,i:8 dir:1个字:

第7阶段curX:0,curY:2,i:9 dir:1个字:

第7阶段curX:3,curY:2,i:7 dir:1个字:

第7阶段curX:2,curY:2,i:8 dir:1个字:

第7阶段curX:1,curY:2,i:9 dir:1个字:

第7阶段curX:0,curY:2,i:10 dir:1个字:

第7阶段curX:3,curY:2,i:8 dir:1个字:

第7阶段curX:2,curY:2,i:9 dir:1个字:

第7阶段curX:1,curY:2,i:10 dir:1个字:

第7阶段curX:0,curY:2,i:11 dir:1个字:

进程返回0(0x0)执行时间:8.528秒 按任意键继续。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  • 你在内部循环中增加X,这意味着它增加了col*rows次,很快就会出现越界条件(你值得一试)。每次增加X时都应重置Y。执行此操作时,Y始终为j + 1X始终为k + 1。在计算头寸时,您需要调整&#34;通过减去1.再次取消值。摆脱jk并使用YX作为循环变量并直接使用它们。

  • 您声明DXDY两次。内部声明是唯一有效的声明,它会影响外部声明。摆脱外面的。

  • C中的二维数组存储行作为第一个索引,列作为第二个索引。它应该是search[curY][curX]

  • 您可能想查找所有中间词,而不仅仅是19个字母的词。将二进制搜索放在内循环中。

  • 不是错误,而是观察:一旦你越界,所有更长的单词也将超出范围。在这种情况下,您可以缩短循环次数。

这是修复这些问题的版本:

void checkWords(char **search, char **dictionary, int rows, int col)
{

    const int DX_SIZE = 8;
    const int DX[] = { -1, -1, -1,  0, 0,  1, 1, 1 };
    const int DY[] = { -1,  0,  1, -1, 1, -1, 0, 1 };
    int i, X, Y;
    int dir = 0;

    for (Y = 0; Y < rows; Y++) {
        for (X = 0; X < col; X++) {
            for (dir = 0; dir < DX_SIZE; dir++) {
                char word[20] = { '\0' };

                for (i = 0; i < 19; i++) {
                    int curX = X + DX[dir] * i;
                    int curY = Y + DY[dir] * i;

                    if (curY < 0 || curY >= rows) break;
                    if (curX < 0 || curX >= col) break;

                    word[i] = search[curY][curX];

                    if (i > 2) {
                        int bin = bSearch(word, dictionary, 0, words());

                        if (bin) printf("%s\n", word);
                    }
                }
            }
        }
    }
}