2

这是我在此的头一篇博文。我一直在研究这个 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)。我有一个 while(!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;
    }
}
4

1 回答 1

0

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

用于std::getline进入下一行。

std::string first_line;
std::getline( file, first_line );
于 2012-09-08T20:25:35.743 回答