Matrix aus der .txt Datei auslesen und neue Matrix-Model abbilden.
-
in meiner .txt Datei stehen eine vector Prior=[1 2 3 4 5] und eine Matrix Transmat=[2 3 3;3 6 3;3 3 0]
es sieht ungefähr so aus:
Prior
1 2 3 4 5Transmat
2 3 3
3 6 3
3 3 0jetzt möchte ich diese Matrix mit dem Titel "Transmat" in der .txt Datei aussuchen,die nützlichen Datein auslesen und die Matrix neu abbilden.
damit hab ich so angefangen:
#include <iostream> #include <vector> #include <strstream> #include <fstream> using namespace std; void main() { vector<float> vec; float temp=0.0f; char s[256]; ifstream fin("D:\\Test.txt"); do { fin.getline(s,256); } while(!strstr(s,"Transmat"));//ein Teilstring "Transmat" wird gesucht while(fin>>temp)// die nützlichen Datein in den Vektor einfügen vec.push_back(temp); //for(int i=0;i<(int)vec.size();i++) //cout<<vec.at(i)<<' '; }jetzt stehen alle Datei der Matrix Transmat in dem Vektor vec:
vec=[2 3 3 3 6 3 3 3 0]aber wie kann ich eine Matrix abbilden?wenn ich versuche eine Matrix durch vector zu definieren wie folgendes:
vector<vector<float>> vec;dann funktioniert
.push_back()nicht mehr.....

-
Also erstens mal empfehle ich dir,
std::stringstattchar-Arrays undstd::string::find()stattstrstr()zu verwenden. Den Header<strstream>benötigst du gar nicht.push_back()funktioniert bei zweidimensionalenstd::vectors genauso. Ein zweidimensionalerstd::vectorist eigentlich ein verschachtelter Container, bei dem die einzelnen Elemente wiederum Container vom Typvectorsind.push_back()fügt da also einen ganzenvectorein.Zudem ist
void main()nicht C++, es heisst nämlich
int main()
-
Nexus schrieb:
push_back()funktioniert bei zweidimensionalenstd::vectors genauso. Ein zweidimensionalerstd::vectorist eigentlich ein verschachtelter Container, bei dem die einzelnen Elemente wiederum Container vom Typvectorsind.push_back()fügt da also einen ganzenvectorein.vielen Dank!!!aber ich habe noch nicht ganz verstanden,wie man zeilenweise die Datei aus .txt auslesen und wieder in meinen Vector einfügen...
z.B.eine Matrix in .txt Datei
2 3 3
3 6 3
3 3 0ich hab mein Prototyp:
vector<vector<float>> matrix; vector<float> vector; float temp; ifstream fin("D:\\Test.txt");wenn ich die Datei auslese und in eine Matrix einfüge wie folgendes:
while(fin>>temp) { vec.push_back(temp); matrix.push_back(vec); }dann sehen der Vektor und die Matrix so aus:
vec[0....9]={2,3,3,3,6,3,3,3,0}
matrix[0]={2}
matrix[1]={2,3}
matrix[2]={2,3,3}
.................
matrix[9]={2,3,3,3,6,3,3,3,0}also,diese
while(fin>>temp)erkennt es nicht,wann die Zeile zu Ende ist.....

-
Du hast einen Denkfehler in deinem Programm. Du bräuchtest eigentlich zwei Schleifen (eine für den äusseren und eine für den inneren Container).
Da der
operator<<nicht zwischen den Whitespace-Zeichen (Leerschlag, Zeilenumbruch, Tab) unterscheidet, könntest du dir malstd::getline()anschauen, beispielsweise auf dieser Seite.