C ++如何使用字符串和空格而不是int来制作2D数组

时间:2012-10-04 09:43:35

标签: c++ arrays input

我正在制作一个数独游戏程序而且我有一个读取

的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:'sudoku_grid [line]'中的'operator []'不匹配

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

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

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

3 个答案:

答案 0 :(得分:2)

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

  1. 在内存2D数组中初始化输出:numbers[9][9]
  2. 打开文件
  3. 直到文件中没有剩余行:
    一个。获取行i
    湾直到行中没有其他字符:
     B1。获取行c的每个字符  B2。如果角色不是空格,则为numbers[i]=c,否则为numbers[i]=-1
  4. 您的数组可以由int和b2组成,如果遇到whitespace,您可以插入-1来表示没有数字。当然,操作numbers数组的代码需要考虑到这一点。

答案 1 :(得分:0)

由于您需要存储字符和整数类型值,因此请使用 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; 
}

答案 2 :(得分:0)

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

在第二段代码中

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

应该是

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

这会回答你的问题吗?