问题
女朋友遇到了一个问题,她两份 Excel 表格:本班学生名单以及全年级学生名单,她想从全年级学生中把本班学生的信息筛选出来。她不想干就丢给我,我感觉一个个找太花费时间了,就帮她写了一个C++程序。记录在此。
思路
首先,为了方便,我首先将她的表格复制到记事本中,本班学生名单用 name.txt 存储,全年级学生名单用 all.txt 存储。
其次,读取 name.txt 将本班同学的名字插入到哈希表,并记录相应序号。
最后,逐条读取全年级学生名单,记录本班同学的信息,然后输出。实现如下:
#include<iostream>
#include<fstream>
#include<string>
#include<unordered_map>
using namespace std;
int main(){
//首先将本班同学名字加入到哈希表中
ifstream name;
name.open("name.txt", ios::app|ios::out|ios::in);
string temp;
unordered_map<string, int> myset;
int d=0;
while(!name.eof()){
getline(name, temp);
myset[temp]=d++;
}
vector<string> res(d, " ");
name.close();
//然后逐条读取所有学生信息
ifstream all;
all.open("all.txt", ios::app|ios::out|ios::in);
ofstream fout("results.txt", ios::out| ios::app );
while (!all.eof()){
getline(all, temp);
string student;
int i=0;
while (temp[i]!='\t'){
i++;
}
student=temp.substr(0, i);
if(myset.find(student)!=myset.end())//遇到本班同学,加入到结果中
res[myset[student]]=temp;
}
for(int i=0; i<d; i++)//输出结果
fout<<res[i]<<"\n";
all.close();
fout.close();
cout<<"love u three thousand times"<<"\n";
system("pause");
}