gpt4 book ai didi

c++ - 从文本文件中读取矩阵,C++

转载 作者:行者123 更新时间:2023-11-30 03:04:10 25 4
gpt4 key购买 nike

friend 们!编程语言是C++。我有一个字节矩阵

unsigned char Map[Height][Width];

我用零初始化它。然后我从文本文件中读取字节矩阵。当然,文本文件可以比我的矩阵更大。在这种情况下,我必须以这种方式从文件中读取信息: enter image description here

文本文件有额外的信息。我不需要它。在另一种情况下,矩阵可以大于文本文件中的信息:

enter image description here

在这种情况下,程序必须从文件中读取所有信息。没有从文件中获取信息的矩阵部分已经初始化。没关系。

在我的案例中,从文件读取信息到矩阵的最佳方式是什么?我尝试使用 fgets,但它以连续的方式从文件中读取所有信息 - 一个字节一个字节地读取。但我不需要读取额外的字节。当然,我可以逐字节读取文件并检查计数器。但我确信这不是最佳解决方案。是否存在更好的解决方案?

我的文本文件的格式与这里无关。我从字节字段等文件中读取信息。

最佳答案

假设您的文本文件如下所示:

3254352
6536543
8875687
4315254
5345435
1212122

标准库流的解决方案是这样的:

#include <fstream>
#include <string>

int main()
{
std::ifstream matrix_file("matrix.txt");

const size_t Width = 5;
const size_t Height = 5;
unsigned char Map[Width][Height];

size_t line_count = 0;
std::string line;

while (std::getline(matrix_file, line) && line_count < Height) {
line.resize(Width);
for (size_t i = 0; i < line.length(); ++i)
Map[i][line_count] = line[i];
++line_count;
}
if (line_count < Height) {
// the file didn't have enough lines to fill our matrix,
// so we'll need to fill the rest with zeroes here
}
}

当 Width 大于文件中行的长度时,上面的 line.resize(Width); 行会自动将空字符放入字符串中。此外,不要忘记在尝试读取流之前检查流是否已成功打开(例如,fstream::is_open())。为简洁起见,我跳过了该检查。

关于c++ - 从文本文件中读取矩阵,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8900071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com