recorrer multidimensionales matriz matrices llenar imprimir arreglos arreglo c++ arrays text-files root multidimensional-array

multidimensionales - matrices en c++



C++ lee los valores de flotación de.txt y los coloca en una matriz 2D de tamaño desconocido (2)

Creo que esto podría ayudarte. Use un vector de un vector de tipo float ya que no tiene conocimiento de la cantidad de elementos. Este código supone que tiene un número de float separado por espacio en cada línea.

fstream fs; fs.open("abc.txt",ios::in); vector<vector<float>> floatVec; string strFloat; float fNum; int counter = 0; while(getline(fs,strFloat)) { std::stringstream linestream(strFloat); floatVec.push_back(std::vector<float>()); while(linestream>>fNum) floatVec[counter].push_back(fNum); ++counter; }

En C ++, quiero leer un archivo de texto con columnas de flotadores y ponerlos en una matriz 2d.

La primera línea será la primera columna y así sucesivamente.

El tamaño de la matriz es desconocido, depende de las líneas y columnas que pueden variar.

Lo he intentado con "getline", "inFile >>", pero todos los cambios que he realizado tienen algunos problemas.

Por ejemplo, ¿hay alguna manera de eliminar las filas / líneas innecesarias después de que los valores estén allí?

El archivo se ve así (+/-):

  • caracteres "/ t" caracteres "/ t" caracteres "/ n"
  • flotar "/ t" flotar "/ t" flotar "/ t" flotar "/ n"
  • flotar "/ t" flotar "/ t" flotar "/ t" flotar "/ n"
  • flotar "/ t" flotar "/ t" flotar "/ t" flotar "/ n"

Gracias

Hasta ahora tengo esto:

int ReadFromFile(){ ifstream inFile; ofstream outFile; int nLinActual = 0; const int nCol = 9; const int nLin = 10; // open file for reading inFile.open("values.txt"); // checks if file opened if(inFile.fail()) { cout << "error loading .txt file reading" << endl; return 1; } // open file for writing outFile.open ("outArray.txt"); // checks if file opened if(outFile.fail()) { cout << "error loading .txt file for writing" << endl; return 1; } // Doesn''t read the first line string dummyLine, dummyLine2, dummyLine3; getline(inFile, dummyLine); // Declares Array float values[nLin][nCol]; //Fill Array with -1 for(int l=0; l<nLin; l++) for(int c=0; c<nCol; c++) values[l][c] = -1; // reads file to end of *file*, not line while(!inFile.eof()) { for (int i=0; i<nCol; i++) { inFile >> values[i][nLinActual]; } i=0; ++nLinActual; } // Check what''s happening cout << endl; for(int l=0; l<nLin; l++){ for(int c=0; c<nCol; c++){ cout << values[l][c] << "/t"; outFile << values[l][c] << "/t"; } cout << endl; outFile << endl; } inFile.close(); outFile.close(); return 0;

}


La forma más fácil es usar un vector:

#include <iostream> #include <vector> #include <string> #include <sstream> #include <fstream> int main() { std::fstream in("in.txt"); std::string line; std::vector<std::vector<float>> v; int i = 0; while (std::getline(in, line)) { float value; std::stringstream ss(line); v.push_back(std::vector<float>()); while (ss >> value) { v[i].push_back(value); } ++i; } }

Actualización: dijiste que lo necesitabas con matrices de C en bruto. Claro, esto se puede hacer:

int main() { std::ifstream in("in.txt"); std::string line; float v[9][10]; int i = 0, k = 0; while (std::getline(in, line)) { float value; int k = 0; std::stringstream ss(line); while (ss >> value) { v[i][k] = value; ++k; } ++i; } }