北理2012年机试题学生操作vector和string

要求:
学生有(学号,姓名,性别,年龄),初始化三个学生的信息(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
输出
(10,wes,f,23),(12,rt,f,67),(20,ert,f,45),(30,str,t,89)
输入:
D10 
输出
(12,rt,f,67),(20,ert,f,45),(30,str,t,89)

 

在本题中,我才用了string的相关子函数,我发现熟悉string相关函数会更容易上手,此题我一如既往地使用了vector,sort排序。

 


#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;

struct Student{
    int ID;
    char name[10];
    char sex;
    int age;
};

bool cmp(Student a,Student b){
    return a.ID>b.ID; 
}

void show(vector<Student> S){
    for(int i=0;i<S.size();i++){
        if(i==0)
            cout<<"("<<S[i].ID<<","<<S[i].name<<","<<S[i].sex<<","<<S[i].age<<")";
        else
            cout<<",("<<S[i].ID<<","<<S[i].name<<","<<S[i].sex<<","<<S[i].age<<")";
    }    
}

int main(){
    vector<Student> stu;
    Student st;
    string doo;
    
    st.ID=10;
    strcpy(st.name,"wes");
    st.sex='f';
    st.age=23;
    stu.push_back(st);
    
    st.ID=20;
    strcpy(st.name,"ert");
    st.sex='f';
    st.age=45;
    stu.push_back(st);
    
    st.ID=30;
    strcpy(st.name,"str");
    st.sex='t';
    st.age=89;
    stu.push_back(st);    
    
    
    
    sort(stu.begin(),stu.end(),cmp);
    show(stu);
    
//    I12,rt,f,67表示插入12,rt,f,67
//    D10 表示删除学号为10的学生的信息


    char imit[10];
    do{
        cout<<"请输入操作:    ";
        cin>>doo;
        if(doo[0]=='I'){
            
            
            int a,b,c;
            a = doo.find(',', 0);
            b = doo.find(',', a+1);
            c = doo.find(',',b+1);       //.find(',', offindex[0]+1);

            for(int i=0;i<10;i++) st.name[i]='\0';

            st.ID=atoi(doo.substr(1,a).data());
            doo.substr(a+1,b-a-1).copy(st.name,doo.substr(a+1,b-a-1).length());
            st.sex=doo[b+1];
            st.age=atoi(doo.substr(c+1,doo.length()-c-1).data() );
            stu.push_back(st);

        }else if(doo[0]=='D'){
            int num=atoi(doo.substr(1,doo.length()-1).data());
            for(int i=0;i<stu.size();i++){
                if(stu[i].ID==num){
                    stu.erase(stu.begin() + i);
                }
            }
        }else{
            cout<<"error"<<endl;
        }
        sort(stu.begin(),stu.end(),cmp);    
        show(stu);
    }while(doo!="##");
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值