hahahahaqg 2023-03-15 17:38 采纳率: 12.5%
浏览 31

STL 的应用,想知道如何改正代码

编程要求
学员需要设计一个学员信息表,并在主函数中读取输入,根据输入的内容作出相应的动作。
输入共有4种,格式如下:

A <姓名> <分数>,向信息表的末尾添加一条记录,内容为<姓名> <分数>,分数均为整数。
注意:如果表中已有同一个人的记录,那就只更新分数。

R <姓名>,删除表中指定姓名的条目,不存在则不做处理。
P,按照<姓名> <分数>的格式打印整个信息表,每条记录占1行。如果表为空,则输出一行[空]。
S,将整个信息表的数据按照分数的降序排序。
注意 :为了保证排序结果稳定,输入的数据保证不会有两条记录有相同的分数。

每种格式的输入占一行,测试有多行输入。详细见测试说明。

测试说明
测试输入:

A 小明 89
A 小张 91
A 小李 67
P
R 小李
S
P

预期输出:

小明 89
小张 91
小李 67
小张 91
小明 89

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include<cstdio>
using namespace std;
class student{
public:
    string name;
    int grade;
    student(){}
    student(string n,int g):name(n),grade(g){}
    student(string n):name(n){}
};
bool operator<(student &a,student &b)
{
    return a.grade<b.grade;
}
bool operator==(student &a,student &b)
{
    return a.name==b.name;
}
ostream &operator<<(ostream &out,student &a){
    out<<a.name<<" "<<a.grade<<endl;
    return out;
}
void swap(student &a,student &b){
    student temp;
    temp=a;
    a=b;
    b=temp;
}
int main()
{
    char a;
    student m;
    vector <student> s;
    while((a=getchar())!=EOF){
        string n;
        int g,flag=0;
        switch(a){
            case 'A':
                cin>>n>>g;
                s.push_back(student(n,g));
                break;
            case 'R':
                cin>>n;
                m=student(n);
                for(vector<student>::iterator it=s.begin();it!=s.end();it++)
                {
                    if(*it==m){
                        swap(s.back(),*it);
                        s.pop_back();
                    }
                }
                break;
            case 'P':
                for(vector<student>::iterator it=s.begin();it!=s.end();it++){
                    cout<<*it;
                    flag=1;
                }
                if(flag==0)cout<<endl;
                break;
            case 'S':
                for(vector<student>::iterator it=s.begin();it!=s.end();it++){
                    for(vector<student>::iterator its=it+1;its!=s.end();its++){
                        if(*it<*its)swap(*it,*its);
                    }
                }
                break;
            default:break;
        }
    }
    return 0;
}





似乎是在删除或者降序排列的时候出的问题,但又一直不知道怎么改,求解QAQ

  • 写回答

3条回答 默认 最新

  • QWQ.qwq 2023-03-15 17:42
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 3月15日