2016-08-03 50 views
0

我是C++編程的新手,我試圖做一個練習題,但我並不真正理解它試圖讓我做什麼一個向量只能容納一種數據類型(除非它可以容納更多):讀取.csv文件並將值存儲到向量和結構體C++中

在.csv文件中讀取,其中每行的結構如下:「username,gpa,age」。將這些值存儲到帶有用戶名,gpa和age(string,float,int)的結構中,並創建一個列表作爲向量。當您在每行中閱讀時,插入到按用戶名排序的向量列表中。然後循環並輸出格式爲「username [gpa] age:#」的列表,例如「mark [3.9] age:19」,並將輸出寫入文件(使用C++而非Unix)。

我應該將所有這些值放入同一個向量作爲單獨的數據類型,或將它們全部放在一個字符串中,然後插入它們?如何將這些值存儲到結構中?如果有人能告訴我他們將如何解決問題,並給我一些很棒的示例代碼,謝謝。

+0

如果需要,您可以創建一個結構向量。 – mash

+0

在C++結構中('struct')與類('class')沒有區別。兩者都可以有成員變量。至於讀文件,['std :: getline'](http://en.cppreference.com/w/cpp/string/basic_string/getline)函數可以幫助讀取文件並解析每一行。 –

+0

該問題要求您構建一個帶有用戶名,gpa和年齡字段的結構。這個結構的向量是可能的。 – heLomaN

回答

0

好的,通過它的聲音,這個問題要你讀取文件,把信息放入一個結構體中,然後按照名稱的字母順序將結構體插入到向量中。

我會做的結構是這樣的:

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

然後我打開該文件,並宣讀了整個事情到一個字符串。然後我讀完字符串,用換行符標記它。當我得到每個字符串時,我將它放入一個函數中,解析它並返回一個結構studentInfo。然後將結構插入向量中。

的解析函數可能是如何工作的一個例子:

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; 
} 

一些僞代碼的主要功能我會做:

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 

的打印功能和排序功能都會自行解釋,他們會要求你寫他們。

+0

非常感謝你!我完全理解你在說什麼,我甚至沒有想過使用substr。 –

+0

不用擔心,很高興我可以幫助:) – naffarn

相關問題