0

我正在制作一个数独程序,我有一个 test.txt 文件,内容为

53__7____    
6__195___
_98____6_
8___6___3
4__8_3__1
7___2___6
_6____28_
___419__5
____8__79

其中“_”实际上是空格。我给你 _ 的原因是你可以看到每行实际上只有 9 个字符。

我当时在想我必须做一些类似 GRID[row][column] 的事情,但坦率地说,我不知道我应该把我的数组作为什么类型,我只是迷路了。

我只是想这样做,所以当我想输出说 GRID[0][0] 它返回 5,而如果我要求 GRID[0][3] 它返回一个''。

它得到了它,所以数组存储数字和空格是我完全迷路的地方

到目前为止我目前尝试过的内容:

int main()
{
 ifstream myfile(test.txt);
 string line;
 char sudoku_grid[9][9];

 if (myfile.is_open())
 {
  while(myfile.good())
   {
    getline(myfile, line);
    cout << sudoku_grid[line] << endl;
   }
   myfile.close();
  }
 else cout << "error";
 return 0;
}

它返回错误行 12: no match for 'operator [ ]' in 'sudoku_grid[line]'

这是我通过你们指导的尝试:

int main()
{
 ifstream myfile(test.txt);
 string line;
 char sudoku_grid[9][9];

 if (myfile.good())
 {
  for(int i = 0; i < 9; i++)
   {
    getline(myfile, line);
    for(int j = 0; j < 9; j++)
       {
       if (line[j] == ' ')
          sudoku_grid[j][i] = -1;
       else  sudoku_grid[j][i] = line[i];
       }
    cout << sudoku_grid[i] << endl;
   }
   myfile.close();
  }
 else cout << "error";
 return 0;
}

结果是一个非常尴尬的奇怪字母和新数字的答案。

4

3 回答 3

2

我只会给你算法/逻辑,而不是为你编写代码。尝试一下,卡住时回来。

  1. 初始化内存二维数组中的输出:numbers[9][9]
  2. 打开文件
  3. 直到文件中没有任何一行
    :获取线i
    b。直到该行中没有更多字符:
      b1。获取 c
      b2 行的每个字符。如果字符不是空格,则numbers[i]=c,否则numbers[i]=-1

您的数组可以由intb2 组成,如果whitespace遇到 a ,您可以插入-1以指示缺少数字。当然,您的代码操作numbers数组需要考虑到这一点。

于 2012-10-04T09:52:45.973 回答
0

由于您需要存储 chars 和 integer 类型值,请使用char。您的每个整数都在 0-9 范围内,因此可以存储为字符。

char Grid[9][9];

现在您可以从字符串中读取每个字符并将其存储在数组中。它不仅可以保持您的空间完整,还可以保持每个字符。永远记得使用 ASCII 码来访问网格的元素。对于0-9,ASCII 码是48-57空格的 ASCII 码是32

希望能帮助到你...

编辑代码:这是最简单的例子... 将您的测试文件放在 d: 中,或在代码中编辑文件的路径

int main (void)
{
    FILE    *fp = fopen("d:\\test.txt","r");
    char sudoku_grid[9][9], ch;
    // I am assuming that file is valid and data in that is also valid
    if(fp)
    {
        for(int i = 0; i < 9; i++)
        {            
            for(int j = 0; j < 9; j++)
            {
                //too read each character
                ch = fgetc(fp);
                sudoku_grid[i][j] = ch;   
            }
            // to read '\n' from the line
            ch = fgetc(fp);
        }
//for checking if data went correctly
        for(int i = 0; i< 9;i++)
        {
            for(int j= 0; j<9;j++)
                cout<<sudoku_grid[i][j];
            cout<<endl;
        }
    }


 return 0; 
}
于 2012-10-04T09:50:04.570 回答
0

在第一个代码中,您会收到错误消息,因为 sudoku_grid 只能按数字而不是字符串来索引。

在第二个代码行

sudoku_grid[j][i] = line[i];

应该是

sudoku_grid[j][i] = line[j];

这回答了你的问题了吗?

于 2012-10-04T11:43:51.950 回答