2016-08-03 9 views
0

Ich bin neu in der Programmierung in C++ und ich versuche, eine Praxis Problem zu tun, aber ich verstehe nicht wirklich, was es versucht, mich dazu zu bringen zu tun, da Vektor kann nur einen Datentyp halten (es sei denn, es halten kann):in einer CSV-Datei lesen und Werte in dem Vektor und Struktur c Speicher ++

lesen in einer CSV-Datei, wobei jede Zeile als solche strukturiert ist: „username, gpa, Alter“. Speichern Sie diese Werte in einer Struktur mit dem Benutzernamen, gpa und dem Alter (string, float, int) und erstellen Sie eine Liste als Vektor. Wie Sie in jeder Zeile lesen, fügen Sie in die Vektorliste nach Benutzernamen sortiert ein. Dann durchlaufen und drucken Sie die Liste formatiert als: "Benutzername [gpa] Alter: #" z. B. "markieren [3.9] Alter: 19" und schreiben Sie auch die Ausgabe in eine Datei (mit C++, nicht Unix).

Soll ich alle diese Werte in den gleichen Vektor als separate Datentypen oder halten sie alle zusammen in einem String setzen und sie dann einfügen? Wie speichere ich diese Werte in einer Struktur? Wenn jemand mir sagen könnte, wie sie die Frage lösen würden und mir einen Beispielcode geben, der großartig wäre, danke.

+0

Sie können einen Vektor von Strukturen erstellen, wenn Sie möchten. – mash

+0

In C++ Strukturen ('struct') ist nicht anders als Klassen (' class'). Beide können Mitgliedsvariablen haben. Wie beim Lesen der Datei kann die Funktion ['std :: getline'] (http://en.cppreference.com/w/cpp/string/basic_string/getline) sowohl beim Lesen der Datei als auch beim Parsen jeder Zeile helfen . –

+0

Das Problem fordert Sie auf, eine Struktur mit dem Feld Benutzername, GPA und Alter zu erstellen. Ein Vektor dieser Struktur ist möglich. – heLomaN

Antwort

0

Ok, durch den Klang der es, die Frage will, dass Sie die Datei lesen, die Informationen in eine Struktur setzen, legen Sie dann die structs in den Vektor in alphabetischer Reihenfolge nach dem Namen.

würde ich die Struktur so etwas wie machen:

struct StudentInfo { 
    string name; 
    string gpa; 
    string age; 
} StudentInfo; 

ich dann die Datei öffnen würde und das Ganze in einen String lesen. Dann habe ich die Zeichenfolge durchgelesen und sie mit Zeilenumbruchzeichen versehen. Wenn ich jeden String bekomme, würde ich ihn in eine Funktion schreiben, die ihn analysiert und eine struct studentInfo zurückgibt. Fügen Sie dann die Struktur in den Vektor ein.

Ein Beispiel dafür, wie die Parsing-Funktion funktionieren könnte:

struct StudentInfo parseData(string iStr) { 
    struct StudentInfo info; 
    size_t subStrStart = 0; 
    size_t subStrEnd = 0; 
    subStrEnd = iStr.find(',', subStrEnd); 
    info.name = iStr.substr(subStrStart, subStrStart - subStrEnd); 

    subStrStart = subStrEnd; 
    subStrEnd = iStr.find(',', subStrEnd+1); 
    info.gpa = iStr.substr(subStrStart, subStrStart - subStrEnd); 

    subStrStart = subStrEnd; 
    subStrEnd = iStr.find(',', subStrEnd+1); 
    info.age = iStr.substr(subStrStart, subStrStart - subStrEnd); 

    return info; 
} 

Einig Pseudo-Code für die Hauptfunktion würde ich machen:

vector<struct StudentInfo> infoVec; 
string fileStr = read(filename.csv); // make an ifstream or something similar 
string lineStr; 
size_t subStrEnd = 0; 
size_t subStrStart = 0; 
while (subStrEnd < fileStr.Size) { 
    subStrEnd = iStr.find('\n', subStrEnd); //alternatively use std::getline() directly on the file stream 
    lineStr = iStr.substr(subStrStart, subStrStart - subStrEnd); 
    subStrStart = subStrEnd; 
    subStrEnd++; 
    infoVec.insert(parseData(lineString)); 
} 
sortByName(infoVec) // User defined function 
printInfoVec(infoVec) // User defined function 

Die Funktion Druck und die Sortierfunktion ist ziemlich selbsterklärend Sie müssten sie allerdings schreiben.

+0

Vielen Dank !! Ich verstehe vollkommen, was du sagst, ich habe nicht einmal darüber nachgedacht, substr. –

+0

Keine Sorge, ich könnte helfen :) – naffarn

Verwandte Themen