抱歉,昨天忘了往博客上更新,今天补上。
成绩查询系统
分值: 21
数学老师小y 想写一个成绩查询系统,包含如下指令:
insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score。
find [name],表示查找名字为name的学生的数学成绩。
注意有些同学可能会为了刷分多次选课,查询的时候给出最大成绩即可。学生的名字是由小写字母组成。成绩是一个 0…100 的整数。
老师找到你,想你帮他完成这个系统。
输入格式
输入若干行,每行都是insert [name] [score]或者find [name]的形式,或一行end表示输入结束。输入行数不大于 1000,每个学生名字长度不大于 20 个字符。
输出格式
对于每个查询,输出查询的学生的最高成绩,如果系统中不存在该学生,输出 ?1。
样例输入
insert zhangsan 90
insert lisi 78
insert xiaoming 86
find xiaoming
find jack
end
样例输出
86
-1
作者注释:本人能力有限,用纯C写的有bug,整std写了一个,仅供参考。
对了,代码功能添加了一个查询所有记录的功能,删掉即符合题意了。
1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespacestd;7 structinfo{8 stringname;9 intscore;10 }stu;11 /*
12 定义find函数:13 功能:在容器中按姓名查找是否有相同姓名的记录;14 参数:结构体类型的容器,字符串类型的姓名;15 返回值类型:指向某条数据的指针。16 */
17 vector::iterator find(vector&stu,stringname){18 vector::iterator it;//声明迭代器
19 for(it=stu.begin();it!=stu.end();it++){20 if(it->name==name)21 break;22 }23 return it;//返回的是指向某条数据的指针
24 }25 intmain(){26 stringsign,name;27 intscore;28 vector inf;//声明结构体类型的容器,用来存放数据
29 cin>>sign;//录入操作符
30 vector::iterator it;//声明迭代器
31 while(sign!="end"){32 if(sign=="insert"){33 cin>>stu.name>>stu.score;//录入
34 it = find(inf,stu.name);//调用函数
35 if(it==inf.end()){36 inf.push_back(stu);37 }else if(it->score
38 inf.insert(it,stu);//存放分数高的记录
39 }else{//没有找到,新存一条记录
40 inf.insert(it+1,stu);41 }42 }43 else if(sign=="find"){44 cin>>stu.name;//录入
45 it=find(inf,stu.name);//调用函数
46 cout<score<name<score<>sign;//执行完一遍操作,进入下一遍
54 }55 return 0;56 }
此题学到一个处理出入输出的技巧:用while来做判断。
如题中while(sign!="end"){······}。