2016-11-12 4 views
0

ich einige Code geschrieben haben, wo das Programm in Informationen aus einer Datei liest (hier ist die Datei)Ändern Arrays zu Vektoren

5 
Franks,Tom 2 3 8 3 6 3 5 
Gates,Bill 8 8 3 0 8 2 0 
Jordan,Michael 9 10 4 7 0 0 0 
Bush,George 5 6 5 6 5 6 5 
Heinke,Lonnie 7 3 8 7 2 5 7 

und legt sie in zwei Reihen. Eine für Namen und eine für Zahlen. Summiert dann die Zahlen und speichert sie im Datenfeld. Jetzt muss ich alle Arrays in Vektoren ändern und ich bin verwirrt, wie das geht. Ich weiß, dass ich push_back verwenden muss, aber ich bin verwirrt, wie ich anfangen soll.

Hier ist der Code mit den Arrays:

int data[50][8]; 
string names[50];  

int const TTL_HRS = 7; 
ifstream fin; 
fin.open("empdata.txt"); 

if (fin.fail()) { 
    cout << "ERROR"; 
} 

int sum = 0; 
int numOfNames; 
fin >> numOfNames; 

for (int i = 0; i < numOfNames; i++) { 

    fin >> names[i]; 

    data[i][7] = 0; 

    for (int j = 0; j < 7; j++) { 
     fin >> data[i][j]; 
     data[i][TTL_HRS] += data[i][j]; 
    } 
} 

fin.close(); 
return numOfNames; 

} 

Ich weiß, dass ich die Arrays Vektoren zu machen. So werde ich

vector<vector<int>>data; 

und

vector<string>names; 

aber ich bin nicht sicher, wie füllen sie gehen.

+0

Ihr C++ Buch sollte mindestens ein Kapitel haben, das erklärt, wie Vektoren funktionieren und wie sie zu verwenden sind. Ich bin mir sicher, dass es ein Beispiel gibt, das zeigt, wie man Werte aus einem Vektor hinzufügt oder entfernt. Hast du dieses Kapitel gelesen? –

Antwort

0

Sie können die Methode .push_back() verwenden, um die Elemente einzeln hinzuzufügen.

Übrigens bin ich neugierig, warum wollen Sie Vektoren anstelle von Arrays?

Zum Beispiel für die Zeichenfolge Vektor, können Sie fin >> names[i]; von

ändern
string tmpString; 
fin >> tmpString; 
names.push_back(tmpString); 

Es ist vielleicht (wahrscheinlich) ein besserer Weg, dies zu tun, aber das ist, wie ich es sehe.

+0

Ich übe mit Vektoren, also möchte ich einen Code ändern, den ich mit Arrays zu einem mit Vektoren gemacht habe – Ralf

+0

Okay, ich habe versucht zu bearbeiten, klarer zu sein^-^ – FeelZoR

+0

ok Ich versuche das jetzt – Ralf

0

Es scheint ziemlich außerhalb des Themas. Aber ich schlage dir eine C++ 11 ähnliche Struktur std::array zu C-Array vor. Für kleine und feste Daten (wie Ihre Probe) ist es more efficient als Std :: Vector.

0

Ich gehe davon aus, die .txt Datei hat die:

Franks Tom 2 3 8 3 6 3 5 

Basic-Lösung für Ihr Problem.

int main(int argc, const char * argv[]) { 
     vector <int> numbers; 
     vector <string> names; 
     string line, name1, name2; 
     int num[7]; 


     ifstream fin("/empdata.txt"); 


     if (!fin.is_open()) { 
      cout << "ERROR"; 
     } 
     else{ 

      while(getline(fin, line)){ 
       istringstream is(line); 

       is >> name1; 
       is >> name2; 
       for(int i=0; i<7; i++){ 
        is >> num[i]; 
       } 
       names.push_back(name1); 
       names.push_back(name2); 

       for(int i=0; i<7 ; i++){ 
        numbers.push_back(num[i]); 
       } 

      } 
      fin.close(); 
     } 
     //Printing what did you read from a file 
     string allNames; 
     for(auto it = names.begin(); it < names.end(); it++){ 
      allNames += (*it) + "\t"; 
     } 
     cout << allNames << endl; 

     for (auto it = numbers.begin(); it < numbers.end(); it ++){ 
      cout << (*it) << "\t"; 
     } 

     return 0; 
    } 
Verwandte Themen