背景:
学院经常要统计人员在校信息,这是最为麻烦的事情,因为总会有个别同学看不到。所以当信息收集起来后,要联系这些人,确认情况。但是首先要把他们找出来,从50多个人里面找出哪些同学没有回复真的好麻烦,要一个一个去对应名单,然后标记,浪费时间。今晚有一次统计这样的信息,想着以后这样的情况还多着呢,所以就编了一个简单的程序,用来查找那些“隐匿”的同学。
使用方法:
将所有人员名单和对应电话,输入到namelist文件里面,每人信息占用一行。
到场人员姓名输入到name文件里面,用空格或换行间隔。
运行程序,将会输出未签到人员。
知识点:
1、读入文件
用ifsream读取文件
2、字符串切割
用stringstream类切割字符串
stringstream ss;
string s=“string1 string2”;
string sub1;
string sub2;
ss<<s;
ss>>sub1;
ss>>sub2;
需要注意的是,将新的字符串赋值给stringsteam前,要调用clear()函数清除stringsteam对象。
程序:
#include<iostream>
#include<string>
#include<sstream>
#include<fstream>
#include<vector>
using namespace std;
class person
{
public:
string name;
string phone;
bool flag;
person & operator =(person per);
};
person & person::operator=(person per)
{
name = per.name;
phone = per.phone;
flag = per.flag;
return *this;
}
void changeFlag(vector<person> &list, string name)
{
for (int i = 0; i < list.size(); i++)
{
if (list[i].name == name)
{
list[i].flag = true;
return;
}
}
cout << name<< "未在名单中,请确认:" << endl;
}
void printPerson(vector<person> list)
{
for (int i = 0; i < list.size(); i++)
{
if (!list[i].flag)
{
cout << list[i].name << " " << list[i].phone << endl;
}
}
}
int main()
{
ifstream information("namelist.txt");
ifstream conformPerson("name.txt");
string temp;
string sub1;
string sub2;
stringstream line;
vector<person> list;
while (getline(information,temp))
{
line<<temp;
line >> sub1;
line >> sub2;
line.clear();
person pertemp;
pertemp.name = sub1;
pertemp.phone = sub2;
pertemp.flag = false;
list.push_back(pertemp);
}
cout << "使用提示:" << endl<<endl;
cout <<"将所有人员名单和对应电话,输入到namelist文件里面,每人信息占用一行。"<<endl;
cout << "到场人员姓名输入到name文件里面,用空格或换行间隔。" << endl;
cout << "运行程序,将会输出未签到人员。" << endl << endl;
while (getline(conformPerson, temp))
{
changeFlag(list, temp);
}
printPerson(list);
system("pause");
return 0;
}
效果: