Leer un archivo de texto en una matriz y luego multiplicarlos

Tengo algunos archivos .txt que se ven así:

1050.00 68.13

1048.00 67.89

1046.00 67.62

1044.00 67.30

1042.00 66.91

[ ... ]

Quiero multiplicar esto a otra matriz.

Mi problema es que no sé cómo leer y almacenar estos datos en una matriz.

¿Alguien tiene alguna idea que me pueda ayudar?

preguntado el 03 de mayo de 12 a las 16:05

¡Bienvenido a Stack Overflow! La forma en que lee los datos depende, en parte, de cómo desea representar los datos en su programa. ¿Ha elegido una estructura de datos para su Matrix? -

quiero multiplicar esto a otros archivos .txt, que también se ve así. y que el resultado debe ser integral. Vendrá el número. Con este número puedo definir qué color (con RGB o algo así) -

3 Respuestas

Yo almacenaría los datos en un vector<vector<double>>, y lo leería usando std::getline, std::istringstreamy operator>>.

#include <vector>
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <iterator>
#include <algorithm>
struct Matrix {
  std::vector<std::vector<double> > data;
  Matrix(const std::string& filename) {
    std::ifstream inFile(filename.c_str());
    std::string inLine;
    while(std::getline(inFile, inLine)) {
      std::istringstream inLineStream(inLine);
      std::vector<double> inLineData(
        (std::istream_iterator<double>(inLineStream)),
        std::istream_iterator<double>());
      data.push_back(inLineData);
    }
  }
  Matrix operator*(const Matrix& rhs) { ... };
};

int main () {
  Matrix a("a.txt");
  Matrix b("b.txt");
  Matrix c(a * b);
}

contestado el 03 de mayo de 12 a las 16:05

¿Qué es una "matriz"?

Si tiene algún tipo de "biblioteca de matrices", simplemente use sus funciones.

Si está implementando las matrices usted mismo, lea el archivo de texto línea por línea (fgets()) y use sscanf() para leer los elementos.

Espero que esto ayude.

contestado el 03 de mayo de 12 a las 16:05

Tenga en cuenta que la pregunta está marcada como C++. Probablemente sea mejor si el OP evita el tipo inseguro fgets y sscanf funciones Preferir std::getline y operator>>. - Robᵩ

Puedes leerlo de esta manera:

char *fname = "matrix.txt";
ifstream infile(fname);

float f;
while (infile >> f) {
   //store f to matrix
}

Hay muchos ejemplos de implementación de clase maxtrix en la web, hay uno: http://www.codeproject.com/Articles/3613/A-generic-reusable-and-extendable-matrix-class

contestado el 03 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.