有两个文件,每个文件有多列数据,最多约14,000行,整齐排列和一切。 File1有6列(学生ID#,学期代码#,班级名称,班级代码#(虽然有些人有字母),学生收到的字母等级,以及他们收到的数字等级。
第二个文件有4列。班级名称,班级代码,每周工作小时数和指定代码(三个字母表示是否为文科课程)。
任务是输出从第一个文件到新文件的所有内容,但添加对应于每个适当行的两列(来自第二个文件),其中包含课程和指定代码的小时数。
第二个任务是获取这个新文件,并输入学生证,CSCI课程的总体GPA,GPA,以及参加非文科课程的百分比。
我并没有要求某人为我做这件事(显然),只是因为我已经没有想法了。我们应该只使用fstream,iostream,字符串,if语句,循环,函数和" 。明确(); "和" seekg(IOS :: BEG); " (我们也不应该使用getline) 基本上超级简单的东西,没有数组或向量或任何东西。
我想出了如何使用while循环和if语句将两个文件的一部分输出到第三个文件中,但我不知道如何告诉它将列中的值从一个文件与另一个文件中的列进行比较并且如果值相等,则从其他列输出相应的值(每个类和指定代码的小时数)。第二项任务我也需要很多帮助。
答案 0 :(得分:0)
您正在寻找的是map
。如果您需要帮助流式传输到map
,可以查看此帖子:Is there a Way to Stream in a Map?
但是您要做的是将File2流式传输到map
,使用"类代码"作为map
键,tuple
或您自己的自定义结构作为值。然后使用"类代码#"索引map
;从您当前从File1输出的行,附加map
的索引值的相应元素。
所有这些听起来像是挥手,所以,因为这个问题没有示例输入和输出,我创建了一个示例性的File1输入,好像它已经在流式传输:tuple<int, int, string, string, char, int> File1[] = {make_tuple(13, 1, "Computer Science 1", "CS101", 'A', 100), make_tuple(13, 2, "Computer Science 2", "CS201", 'A', 100)};
和File2输入一样它已经流式传输:map<string, tuple<string, int, string>> File2 = {make_pair("CS101", make_tuple("Computer Science 1", 4, "NOT")), make_pair("CS201", make_tuple("Computer Science 2", 4, "NOT"))};
然后可以将这些流式传输到另一个文件,如下所示:
for(auto& it : File1) {
const auto& i = File2[get<3>(it)];
cout << get<0>(it) << ' ' << get<1>(it) << ' ' << get<2>(it) << ' ' << get<3>(it) << ' ' << get<4>(it) << ' ' << get<5>(it) << ' ' << get<1>(i) << ' ' << get<2>(i) << endl;
}