如何读取.text文件并将数据存储在9x9数组中? C ++

时间:2014-03-26 13:10:54

标签: c++ arrays sudoku

我是c +的新手并且我正在尝试读取文件并将其存储在9x9数组中,任何人都可以解释我如何在保持尽可能简单的同时做到这一点? 目标也是制作数独求解器。

文件看起来像;

0 3 0 0 0 1 0 7 0

6 0 0 8 0 0 0 0 2

0 0 1 0 4 0 5 0 0

0 7 0 0 0 2 0 4 0

2 0 0 0 9 0 0 0 6

0 4 0 3 0 0 0 1 0

0 0 5 0 3 0 4 0 0

1 0 0 0 0 6 0 0 5

0 2 0 1 0 0 0 3 0

提前致谢。

2 个答案:

答案 0 :(得分:1)

您需要使用std::istringstream

例如

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

//...

const size_t N = 9;

int a[N][N] = {};

std::ifstream file( "SomeFileName" );

std::string line;

for ( size_t i = 0; i < N && std::getline( file, line ); i++ )
{
   std::istringstream is( line );

   size_t j = 0;

   while ( j < N && is >> a[i][j] ) j++;
}

如果您不应该打扰每行可以包含多于或少于9个数字的行,那么您可以简单地写一下

#include <iostream>
#include <fstream>

//...

const size_t N = 9;

int a[N][N] = {};

std::ifstream file( "SomeFileName" );

size_t i = 0;

while ( i < N * N && file >> a[i / N ][i % N] ) i++;

答案 1 :(得分:1)

有几种方法可以做到这一点,所有这些方法都首先打开文件。为此,您需要包含fstream并创建一个“文件输入”阅读器(查看ifstream类)。

一旦你拥有它,它就非常直接。您可以通过循环到文件的末尾来逐字符地抓取并相应地存储数字,或者您可以逐行获取文件,然后遍历每一行以获取数字。如果你这样做,有一些方法可以帮助将字符串拆分成基于空格的数组,但我会让你看一下。此外,获取该行将意味着您需要将换行符捕获到垃圾变量中,以便它可以继续,否则下次获得一行时它将获得该变量。

forwhile循环将成为您的朋友。

此外,请不要忘记在完成后关闭文件流。

编辑: 我忘了提一下,如果你逐行进行,你需要使用一些方法将字符串/数组转换成一个整数(atoi是一个,我也认为有一个stoi但是你可能需要包含string来使用它,或者我误解了那个)。逐个字符地执行它可以直接转换为整数,但是最好确保文件中没有任何非数字字符,并且不存在。