直接上代码。
#include <string>
#include <fstream>
#include <iostream>
#include <set>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
//读取文件
ifstream study("study.txt");
ifstream data("data.txt");
//检查文件
if (!study.is_open() | !data.is_open())
{
cout << "未成功打开文件" << endl;
}
//分别读取内容保存
set<string> set_study;
set<string> set_data;
const int student_num = 323;
for (int i = 0; i < student_num; i++)
{
string temp;
getline(data, temp);
//cout <<"读取的内容: "<<temp << endl;
if (temp.size() == 0)
break;
char*str = (char *)temp.c_str();
char *pTmp = NULL;
char *name;
name = strtok_s(str, "\t", &pTmp);
set_data.insert(name);
}
cout <<"学生人数"<< set_data.size() << endl;
for (auto iter = set_data.begin(); iter != set_data.end(); ++iter) {
cout << *iter << " ";
}
cout << endl;
for (int i = 0; i < student_num; i++)
{
string temp;
//读取行
getline(study, temp);
//cout << temp<<temp.size() << endl;
if (temp.size() == 0)
break;
//分割字符串
char*str = (char *)temp.c_str();
char *pTmp = NULL;
char *name;
name = strtok_s(str, "\t", &pTmp);
set_study.insert(name);
}
cout <<"已经学习的人数"<< set_study.size() << endl;
for (auto iter = set_study.begin(); iter != set_study.end(); ++iter) {
cout << *iter << " ";
}
cout << endl;
//求未完成学习名单
set<string> unstudy_name;
for (auto iter = set_data.begin();iter != set_data.end();++iter) {
if (set_study.find(*iter) == set_study.end())
{
unstudy_name.insert(*iter);
}
}
cout << "未学习的人数" << unstudy_name.size() << endl;
//写入文件
ofstream unstudy("unstudy.txt");
for (auto iter = unstudy_name.begin(); iter != unstudy_name.end(); ++iter) {
cout << *iter << " ";
unstudy << *iter << "\n";
}
cout << endl;
study.close();
data.close();
unstudy.close();
system("pause");
return 0;
}
运行结果如下:在debug文件下有相应的txt文件。