2012北理机试-学生排序

想用class构造函数啥的写写不出来....

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>


/*
    学生有(学号,姓名,性别,年龄)初始化三个学生的信息
    (10,wes,f,23)(20,ert,f,45)(30,str,t,89)
    然后对学生信息进行处理

    例如:I12,rt,f,67表示插入12,rt,f,67
    D10表示删除学号为10的学生的信息
    每次操作完成之后输出所有学生的信息按照学号从大到小排序

    输入:I12,rt,f,67
    输出:
    (30,str,t,89)
    (20,ert,f,45)
    (12,rt,f,67)
    (10,wes,f,23)

    输入:D10
    输出:
    (30,str,t,89)
    (20,ert,f,45)
    (12,rt,f,67)
*/

using namespace std;

struct Stu{

    int id;
    string name;
    string gender;
    int age;
};

cmp(Stu a, Stu b){
    return a.id < b.id;
}

int main(){

    Stu stu[30];
    stu[0].id = 1; stu[0].name = "aa"; stu[0].gender = "f"; stu[0].age = 10;
    stu[1].id = 2; stu[1].name = "BB"; stu[1].gender = "f"; stu[1].age = 11;
    stu[2].id = 3; stu[2].name = "aD"; stu[2].gender = "m"; stu[2].age = 12;

    int n = 3;

    while(1){
        char op[50];
        gets(op);
        if(op[0] == '0'){
            break;
        }
        //添加一个学生
        if(op[0] == 'I'){
            int id, age;
            char name[10], gender[2];
            sscanf(op,"I%d,%[^,],%[^,],%d", &id, name, gender, &age);
            stu[n].id = id;
            stu[n].name = name;
            stu[n].gender = gender;
            stu[n].age = age;
            n++;
        }
        //删除一个学生
        if(op[0] == 'D'){
            int idd;
            sscanf(op,"D%d",&idd);
            int i;
            int flag = 0; //find student

            for(i=0; i<n; i++){
                if(stu[i].id == idd){
                    flag = 1;
                    break;
                }
            }
            if(!flag)
                cout << "没有找到学生";
            else{
                for(; i<n-2; i++){
                    stu[i].id = stu[i+1].id;
                    stu[i].name = stu[i+1].name;
                    stu[i].gender = stu[i+1].gender;
                    stu[i].age = stu[i+1].age;
                }
                n--;
            }
        }
        sort(stu,stu+n,cmp);
        int i;
        for(i=0; i<n-1; i++){
            cout << "(" << stu[i].id << "," << stu[i].name << "," << stu[i].gender << "," << stu[i].age << ")";
        }
        cout << "(" << stu[i].id << "," << stu[i].name << "," << stu[i].gender << "," << stu[i].age << ")" << endl;;
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值