2016-08-03 51 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

相关问题