北理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
#include
#include
#include
#include
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 S){
    for(int i=0;i         if(i==0)
            cout<<"("<         else
            cout<<",("<     }    
}

int main(){
    vector 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                 if(stu[i].ID==num){
                    stu.erase(stu.begin() + i);
                }
            }
        }else{
            cout<<"error"<         }
        sort(stu.begin(),stu.end(),cmp);    
        show(stu);
    }while(doo!="##");
    return 0;
}

你可能感兴趣的:(北理2012年机试题学生操作vector和string)