将两个矩阵与两个未知维度的文本文件相乘

时间:2012-09-08 20:10:56

标签: c++ matrix dimensions sparse-matrix

这是我在这里的第一篇文章。我一直在研究这个c ++问题已经有一段时间了。也许你们可以给我一些提示让我开始。

我的程序必须读取两个.txt文件,每个文件包含一个矩阵。然后它必须将它们相乘并将其输出到另一个.txt文件。我在这里的困惑是如何设置.txt文件以及如何获取尺寸。这是矩阵1.txt。

的示例
#ivalue      #jvalue      value
   1            1           1.0
   2            2           1

矩阵的维数为2x2。

1.0     0
0       1

在我开始乘以这些矩阵之前,我需要从文本文件中获取i和j值。我发现这样做的唯一方法是

int main()
{
  ifstream file("a.txt");
  int numcol;
  float col;
  for(int x=0; x<3;x++)
  {
    file>>col;
    cout<<col;
    if(x==1)     //grabs the number of columns
    numcol=col;
  }
  cout<<numcol;
}

问题是我不知道如何到第二行读取行数。最重要的是,我认为这不会给我其他矩阵文件的准确结果。

如果有什么不清楚,请告诉我。

更新 谢谢! 我让getline正常工作。但现在我遇到了另一个问题。在矩阵B中,它的设置如下:

#ivalue      #jvalue         Value
    1         1              0.1
    1         2              0.2
    2         1              0.3
    2         2              0.4

我需要让程序知道它需要下降4行,甚至更多(矩阵尺寸未知。我的矩阵B示例是2x2,但它可能是20x20)。我有一段时间(!file.eof())循环我的程序让它循环直到文件结束。我知道我需要一个动态数组来进行乘法,但我也需要一个吗?

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream file("a.txt");      //reads matrix A
    while(!file.eof())
    {
        int temp;
        int numcol;
        string numrow;
        float row;

        float col;
        for(int x=0; x<3;x++)
        {
            file>>col;
            if(x==1)
            {
                numcol=col;      //number of columns
            }
        }

        string test;
        getline(file, test);     //next line to get rows
        for(int x=0; x<3; x++)
        {
            file>>test;
            if(x==1)
            {
                numrow=test;     //sets number of rows
            }
        }
        cout<<numrow;
        cout<<numcol<<endl;
    }


    ifstream file1("b.txt");     //reads matrix 2
    while(!file1.eof())
    {
        int temp1;
        int numcol1;
        string numrow1;
        float row1;

        float col1;
        for(int x=0; x<2;x++)
        {
            file1>>col1;
            if(x==1)
                numcol1=col1;    //sets number of columns
        }

        string test1;
        getline(file1, test1);   //In matrix B there are four rows.
        getline(file1, test1);   //These getlines go down a row.
        getline(file1, test1);   //Need help here.
        for(int x=0; x<2; x++)
        {
            file1>>test1;
            if(x==1)
                numrow1=test1;
        }
        cout<<numrow1;
        cout<<numcol1<<endl;
    }
}

1 个答案:

答案 0 :(得分:0)

“问题是我不知道如何到第二行读取行数。”

使用std::getline转到下一行。

std::string first_line;
std::getline( file, first_line );