我是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
提前致谢。
答案 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
类)。
一旦你拥有它,它就非常直接。您可以通过循环到文件的末尾来逐字符地抓取并相应地存储数字,或者您可以逐行获取文件,然后遍历每一行以获取数字。如果你这样做,有一些方法可以帮助将字符串拆分成基于空格的数组,但我会让你看一下。此外,获取该行将意味着您需要将换行符捕获到垃圾变量中,以便它可以继续,否则下次获得一行时它将获得该变量。
for
和while
循环将成为您的朋友。
此外,请不要忘记在完成后关闭文件流。
编辑:
我忘了提一下,如果你逐行进行,你需要使用一些方法将字符串/数组转换成一个整数(atoi
是一个,我也认为有一个stoi
但是你可能需要包含string
来使用它,或者我误解了那个)。逐个字符地执行它可以直接转换为整数,但是最好确保文件中没有任何非数字字符,并且不存在。