C++ 纵横字谜游戏:读取2d给定数组并沿对角线c+搜索+;

C++ 纵横字谜游戏:读取2d给定数组并沿对角线c+搜索+;,c++,arrays,2d,crossword,C++,Arrays,2d,Crossword,这是一款填字游戏。我想读一个对角线的数组。 我应该在给定的2d数组中找到一些单词 此数组从给定文件中读取 它是n*m大小;m并不总是=n 我如何阅读对角线方向的2d: 例如: m = 4 n = 4 b o o k z a k o s l l e x y z l ball: found [b] o o k z [a] k o s l [l] e x y z [l] foo: not found 代码如下: char ReadArray(char* array, int r, int c,

这是一款
填字游戏
。我想读一个对角线的数组。 我应该在给定的2d数组中找到一些单词 此数组从给定文件中读取 它是n*m大小;m并不总是=n

我如何阅读对角线方向的2d:

例如:

m = 4
n = 4
b o o k
z a k o
s l l e
x y z l

ball: found

[b] o o k
z [a] k o
s l [l] e
x y z [l]

foo: not found
代码如下:

char ReadArray(char* array, int r, int c, int n, int m)
{
   return (r > 0 && r <= n && c > 0 && c <= m) ?
                  array[n * (r - 1) + (c - 1)] : '\0';
}
char ReadArray(char*array,int r,int c,int n,int m)
{
返回(r>0&&r>0&&c
charreadrc(char*array,intr,intc,intn,intm)
{

返回(r>0&&r 0&&c您可以发布到目前为止您拥有的代码,并解释您在具体操作中遇到困难的部分吗?就像手动操作一样进行编码。例如,如果您想在右下角对角方向进行检查,请从某个行/列对开始,并在那里获取字符,然后将行和列各增加1以获得字符下一个字符。重复此操作,直到找到最后一列、最后一行或字符串与要查找的单词匹配为止。
char readrc(char* array, int r, int c, int n, int m)
{
   return (r > 0 && r <= n && c > 0 && c <= m) ?
                  array[n * (r - 1) + (c - 1)] : '\0';
}

void read_down_right(char* array, int n, int m, vector<string>& list)
{
   for (int sc = 2 - n; sc <= m - 1; sc++)
   {  
      string str = "";
      for (int r = 1, c = sc; r <= n; r++, c++)
      {
         char chr = readrc(array, r, c, n, m);
         if (chr != '\0')
            str += chr;
      }
      list.push_back(str);
   }
}

void read_down_left(char* array, int n, int m, vector<string>& list)
{
   for (int sc = 2; sc <= m + n - 2; sc--)
   { 
      string str = "";
      for (int r = 1, c = sc; r <= n; r++, c--)
      {
         char chr = readrc(array, r, c, n, m);
         if (chr != '\0')
            str += chr;
      }
      list.push_back(str);
   }
}