我坚持这一部分,我希望得到一些帮助。我有一个基本上是单词搜索的项目。该程序读入一个文件,其中包含行和列,后跟单词搜索拼图本身。您需要从单词搜索中创建可能的字符串组合,并使用作为另一个文本文档提供的字典检查这些组合。
以下是第1个读取的文件的行示例,第2个是Cols,后跟单词搜索难题:
4 4
syrt
gtrp
faaq
pmrc
所以除了为上面文件创建字符串的函数之外,我已经能够使大部分代码工作。基本上它需要搜索wordsearch并创建字符串,每个创建的字符串都会传递给另一个函数来检查它是否在字典中。然而,在创建字符串时,我的代码仍然不受限制,并且它继续导致Seg故障,这真的令人沮丧。
这些是声明的常量,在搜索单词搜索拼图时可能的方向去寻找可能的字符串组合
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 strCreate(char** puzzle, char** dictionary, int n, int rows, int col){
int x, y;
int nextX, nextY, i;
char str[20] = {0};
int length = 1;
for(x = 0; x < rows; x++)
{
for(y = 0; y < col; y++)
{
//Grabs the base letter
str[0] = puzzle[x][y];
length = 1;
for(i = 0; i < DX_SIZE; i++)
{
while(length < MAX_WORD_SIZE)
{
nextX = x + DX[i]*length;
nextY = y + DY[i]*length;
// Checking bounds of next array
//This is where I'm having trouble.
if((x + nextX) < 0 || (nextX + x) > (col-1)){
printf("Out of bounds\n");
break;
}
if((y + nextY) < 0 || (nextY + y) > (rows-1)){
printf("Out of bounds\n");
break;
}
str[length] = puzzle[nextX][nextY];
//search for str in dictionary
checkStr(str, dictionary, n);
length++;
}
memset(&str[1], '\0', 19);
}
}
}
return 0;
}
我知道我没有正确检查界限我只是无法弄清楚如何。当X = 1且nextX = -1时,通过边界检查,但是说数组处于拼图[0] [0] nextX将拼图[-1] [0]超出范围导致seg故障。
感谢您抽出宝贵时间阅读,我感谢任何帮助。
答案 0 :(得分:1)
nextX和nextY是用于访问数组拼图的索引。然后,数组绑定检查也应该包含相同的内容。但是数组绑定检查包括例如x + nextX。
// Checking bounds of next array
//This is where I'm having trouble.
if((x + nextX) < 0 || (nextX + x) > (col-1)){
printf("Out of bounds\n");
break;
}
实施例: if(nextX <0) printf(&#34;超出范围...... \ n&#34;);