我是一名java / C#开发人员,我正在尝试编写C或C ++代码来从文本文件中读取数据。这在java和c#中很容易完成,但在c或c ++中却没有。
我正在阅读的文本文件如下所示:
a,b,c,d,e
1,0,1,1,0
0,1,1,0,0
0,0,0,1,1
我需要将值存储在2个数组中
第一个是1D字符数组,其中包含:a b c d e
第二个是2D bool数组,它将包含:
1 0 1 1 0
0 1 1 0 0
0 0 0 1 1
我该怎么做?
答案 0 :(得分:1)
我建议您至少尝试一下您要做的事情,以帮助您开始,这里是您提供的示例数据的基本读物。此示例应该足够简单,允许您扩展它以满足其他数据集。
#include <iostream>
#include <fstream>
int main() {
const int n_letters = 5;
const int n_columns = 5;
const int n_rows = 3;
char letters[n_letters];
bool booleans[n_rows][n_columns];
std::ifstream stream("myfile.txt");
if (stream) {
for (int i = 0; i < n_letters; ++i) {
stream >> letters[i];
std::cout << letters[i] << ',';
}
std::cout << '\n';
for (int i = 0; i < n_rows; ++i) {
for (int j = 0; j < n_columns; ++j) {
stream >> booleans[i][j];
std::cout << booleans[i][j] << ',';
}
std::cout << '\n';
}
}
return 0;
}
阅读以下文字:
a b c d e
1 0 1 1 0
0 1 1 0 0
0 0 0 1 1
输出:
a,b,c,d,e
1,0,1,1,0
0,1,1,0,0
0,0,0,1,1
答案 1 :(得分:0)
第一条评论:在解析文件时,阅读通常很有用 文件逐行,然后解析每一行,使用 std :: istringstream,或boost :: regex,或其他任何技术 你先请。我喜欢boost :: regex,因为它立即 表示是否存在语法错误,但是经过精心设计, istream也可以。
无论如何,首先要更精确地指明 格式:总是只有一个字母?这些数字总是如此 只有0和1?每行总是有五个值吗? 在我们知道之前,要说更多内容是非常困难的。