2

これが私の最初の投稿です。私はこのc++の質問にしばらく取り組んできましたが、どこにも行き着きませんでした。たぶんあなたたちは私が始めるためのいくつかのヒントを私に与えることができます。

私のプログラムは、それぞれが1つのマトリックスを含む2つの.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;
}

問題は、行数を読み取るために2行目に到達する方法がわからないことです。それに加えて、これで他のマトリックスファイルの正確な結果が得られるとは思いません。

不明な点がありましたらお知らせください。

更新 ありがとう!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

「問題は、行数を読み取るために 2 行目に到達する方法がわからないことです。」

std::getline次の行に移動するために使用します。

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