【问题标题】:Store matrix from a text file in C++在 C++ 中存储文本文件中的矩阵
【发布时间】:2014-07-25 22:48:25
【问题描述】:

您好,非常感谢!

我是 C++ 新手,抱歉,如果我的出发点是废话……我需要打开并阅读一个文本文件以应用一些数值程序,但我发现很难弄清楚这一步。 ..

接下来,您可以看到文本数据。您将如何阅读此文本,将这些值/数字存储在维度为 [3,4] 的矩阵中?

readdata.txt:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1    0.00000e+00    0.00000e+00
    2    1.00000e+00    0.00000e+00
    3    0.00000e+00    -1.00000e+00
    4    2.00000e+00    -2.00000e+00
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

我被这个起始代码卡住了......

string line;
ifstream myfile ("readata.txt");
if (myfile.is_open())
{
    while (! myfile.eof() )
{
for (int lineno = 0; getline (myfile,line) ; lineno++)
{
        if (lineno >= 2 && lineno <= 5)
        {
            cout << line << endl;
        }
        else
        {};
    }
    myfile.close();
}
else cout << "Unable to open file";

【问题讨论】:

  • 使用std::stringstream 处理您的线路。
  • 不要使用while (! myfile.eof() )
  • 请学会缩进你的代码。编写不可读的代码只会给你带来坏习惯,这些坏习惯会在(过早的)未来卷土重来并困扰你。
  • (你说得对,Joachim。)你能给我一些代码指导,以便我继续工作吗?我已经尝试了一些东西,但不能让它发挥作用......
  • 了解如何使用std::stringstream。创建一个包含一个整数和两个双精度数的类。创建该类型的std::vector,将字符串流中的值解析为该类的实例,并将push_back() 该实例解析为向量。

标签: c++ arrays integer text-files


【解决方案1】:

让您开始:

  • 使用std::stringstream 将字符串(每一行)作为流操作
  • 使用std::stodstring 转换为double
  • 不要检查eof(),它不会按照您的想法进行。相反,您可以检查 getline() 返回的值

一个最小的工作示例可能如下所示(可以优化,但我希望它易于阅读):

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

    if(!file)
        throw std::runtime_error("Error opening file");

    double matrix[4][3];
    std::string line;
    unsigned i = 0;
    while(std::getline(file, line))
    {
        std::stringstream ss;
        ss << line;
        std::string x, y, z;
        ss >> x >> y >> z;

        double xd = std::stod(x);
        double yd = std::stod(y);
        double zd = std::stod(z);

        std::cout << xd << " " << yd << " " << zd << '\n';
        matrix[i][0] = xd;
        matrix[i][1] = yd;
        matrix[i][2] = zd;
        i++;
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 2021-03-04
    • 2018-05-13
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多