如何读取文本文件中的矩阵并将其存储在c++中

How can I read a matrix within a text file and storing it in c++?

本文关键字:存储 c++ 取文本 何读 文件      更新时间:2023-10-16

我正试图通过读取一个名为matrix.txt的文件并存储它们的值来在C++中构建一个矩阵,这样我就更容易运行其他算法了。我对使用fstream还很陌生,所以这可能不是最有效的代码,但这是我迄今为止的尝试(注意,大多数类都用于其他算法)。

我决定测试一下,看看它是否正常工作但当我走到一行的末尾时,我似乎遇到了这个问题文本文件值用分隔符"分隔,但其行用换行符分隔当我执行这个代码(底部有注释)时,我得到两个值。行上的最后一个值和下一行的第一个值。但当我删除这些评论时,我就不会遇到这个问题<有办法解决这个问题吗>

我的代码:

    #include <iostream>
    #include <list>
    #include <math.h>
    #include <iomanip>
    #include <algorithm>
    #include <fstream>
    #include <string>
    using namespace std; 
int main(){
    string str[80][80];
    ifstream eulereightyone;
    int a = 0;
    int b = 0;
    eulereightyone.open("matrix.txt");
    if (!eulereightyone)
    {
        cout << "couldn't open file" << endl;
        system("pause");
        return 0;
    }
    while (eulereightyone.good())
    {
        getline(eulereightyone, str[a][b], ',');
        if (a > 78)
        {
            a = 0;
            ++b;    
        }
        a++;
    }
  //cout << str[78][1] << endl;
    cout << str[79][1] << endl;
  //cout << str[0][2] << endl;
    system("pause");
    return 0;
}

如果您这样做是为了学习如何使用静态表,那么这是可以接受的。然而,如果你正在为一个更大的项目处理这样的数据(或者在获得一些C++经验后),这不是一个好的做法,你肯定应该使用标准库

您可能会经常得到这个答案,但在C++中不为矩阵/list/vvectors/multimap重新编码容器是一种非常好的做法。使用标准库,这样您就不必重新实现所有排序方法/模板,而且对于非常大的数据子集,您将拥有有用的运算符,如move

这也是一个安全问题,如果您的代码使用静态表进入生产环境,则可能会出现溢出。

在这个特定问题的情况下,你可以做一个vector<string>,这样你的矩阵就可以重新调整大小并由你定义,而不是静态的,如果你在定义的范围之外调用,它就会正常失败。

vector<string> > vec;
const int rows = 80;
const int columns = 80;
vec.resize(rows * columns);
for (int row = 0; row < rows; ++row) {
    for (int col = 0; col < columns; ++col) {
        getline(eulereightyone, vec[row * columns + col], ',');
    }
}