添加稀疏矩阵

时间:2018-02-27 23:50:29

标签: c++ struct sparse-matrix

对于我们的编程类,我们必须通过读取2个输入文件将两个稀疏矩阵一起添加。我们需要使用结构来存储矩阵中的值,并动态地为元素的大小分配大小。我理解为矩阵的大小分配内存然后读取输入矩阵文件的每一行以找到行(int r;),列(int c;)和该特定值(double值)>的逻辑。据我所知,只有在矩阵中具有相同位置时才会添加这些值。但是,从语法的角度来看,我正在努力解决这个问题。这是我到目前为止,以及一个示例输入文件。

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int size1 = 100;
int size2 = 100;


struct element
{
    int r;
    int c;
    double value;
};


int main()
{
    ifstream inputfile;
    inputfile.open("TextFile1.txt");
    string line;


    char ch;
    int i = 0;
    int r; 
    int c;
    double value;

    for (i = 0; i <= 0; i++)
    {
        getline(inputfile, line);
        inputfile >> r >> c;

    }
    size1 = (r + 1) * (c + 1);

    while (getline(inputfile, line))
    {
        inputfile >> r >> c >> value;
        cout << r << c << value << endl;
    }
    element m1[10];
    {
        m1[0].r = r;
        m1[1].c = c;
        m1[2].value = value;
    }
    cout << m1[0].r << m1[1].c << m1[2].value << endl;

system("pause");
return 0;

}

输入文件:

#Matrix A
2 2
1 1 2.2
2 2 3

到目前为止,这只存储了矩阵的最后一行的int r,int c和double值,并且我混淆了为什么它跳过第一行(1 1 2.2)?我也很难弄清楚如何为矩阵文件中的每一行创建一个单独的结构。如果没有为我工作,任何人都可以提供一些技巧,说明我应该如何存储输入文件中的信息以及如何将其转换为必须在同一位置添加值才能添加?

更新:由于我的for循环,我仍然遇到问题。我试图做的是跳过包含#&#39;#&#39;但如果说#&#39;#&#39;那么代码就不会起作用。是代码中的任何其他位置。 (对于提供给我们的示例输入,有些&#39;#&#39;随机嵌入代码中,我们必须找到一种方法来跳过该行,如果有的话)

2 个答案:

答案 0 :(得分:0)

while (getline(inputfile, line))
{
    inputfile >> r >> c >> value;
    cout << r << c << value << endl;
}

这将从文件中读取每一行......然后对其执行任何操作。在循环结束时,这些变量将保留其读取的最后一行的值。

然后你将这些变量中的内容留在你的元素数组中。

您需要将元素数组更新为,而不是之后的循环。除非你把它们放在一起,否则程序将不会记住你的变量!

您可能需要以下内容:

int line = 0;
element m1[10];
while (inputfile >> r >> c >> value)
{
    cout << r << c << value << endl;
    m1[line].r = r;
    m1[line].c = c;
    m1[line].value = value;
    line++;
}

答案 1 :(得分:0)

我很困惑为什么跳过第一行(1 1 2.2)? 此代码不会跳过第一行(1 1 2.2)。 在我的理解中,第一行2 2告诉我们稀疏矩阵的维数(3 * 3)。下一部分是稀疏矩阵(row,col,value)中的元素值。 我建议你使用vector(vector&lt; element&gt;)来解决这个问题。 的

<form method="GET" >
  <input type="checkbox" name="categories[]" value="test1" />
  <input type="checkbox" name="categories[]" value="test2" />
  <input type="checkbox" name="categories[]" value="test3" />
</form>