要求:
学生有(学号,姓名,性别,年龄),初始化三个学生的信息(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;
}