数据读入txt读出txt并对结构体进行排序

从键盘输入 4 个学生的数据( 包括姓名、年龄和成绩),并存放在文件 sf1 上。从该文件读出这些数据,按成绩从高到底排序,并输出其中成绩次高者的所有数据。

#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct student{
	string name;
	int age;
	int grades;
}stu;

bool cmp(stu s1,stu s2){
	if(s1.grades!=s2.grades)
		return s1.grades>s2.grades;
	else if(s1.name!=s2.name)
		return s1.name>s2.name;
	else if(s1.age!=s2.age)
		return s1.age>s2.age;
}

int main(){
	stu s1;
	vector<student> s2;
	cout<<"请输入四个学生的姓名,年龄,成绩,以00 00 00结束"<<endl;
	ofstream out("sf1.txt");
	while(cin>>s1.name>>s1.age>>s1.grades)
	{
		if(s1.name=="00")
		break;
		out<<s1.name<<" "<<s1.age<<" "<<s1.grades<<endl; 
	}
	
	ifstream in("sf1.txt");
	while(!in.eof()){
		in>>s1.name>>s1.age>>s1.grades;
		if(in.fail())
		break;
		s2.push_back(s1);
	}
	sort(s2.begin(),s2.end(),cmp);
	
	vector<stu>::iterator i;
	for(i=s2.begin();i!=s2.end();i++)
	cout<<(*i).name<<" "<<(*i).age<<" "<<(*i).grades<<endl;
	
	cout<<"成绩次高者信息:"<<endl;
	i=s2.begin()+1;
	cout<<(*i).name<<" "<<(*i).age<<" "<<(*i).grades<<endl;
	
	return 0;
}

其中algorithm中的sort函数,前两个参数为排序范围,第三个参数为比较方式,传递的为函数地址,大于的话为从大到小,小于的话为从小到大。
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值