请详细写出上面的可运行代码
时间: 2023-12-01 19:03:54 浏览: 85
写出健壮的Bash脚本
好的,以下是可运行的代码:
```
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// 读取数据
ifstream file("data.txt");
vector<vector<int>> scores;
while (!file.eof()) {
vector<int> row;
int id, score;
file >> id >> score;
row.push_back(id);
row.push_back(score);
scores.push_back(row);
}
// 计算班级排名
vector<int> class_ranks(scores.size(), 1);
for (int i = 0; i < scores.size(); i++) {
int rank = 1;
for (int j = 0; j < scores.size(); j++) {
if (scores[j][0] == scores[i][0] && scores[j][1] > scores[i][1]) {
rank++;
}
}
class_ranks[i] = rank;
}
// 计算学校排名
vector<int> school_ranks(scores.size(), 1);
sort(scores.begin(), scores.end(), [](const vector<int>& a, const vector<int>& b) {
return a[1] > b[1];
});
for (int i = 0; i < scores.size(); i++) {
int rank = 1;
for (int j = 0; j < scores.size(); j++) {
if (scores[j][1] > scores[i][1]) {
rank++;
}
}
school_ranks[i] = rank;
}
// 导出表格
ofstream output("output.txt");
output << "Class\tID\tScore\tRank" << endl;
int current_class = -1;
for (int i = 0; i < scores.size(); i++) {
if (scores[i][0] != current_class) {
if (current_class != -1) {
output << endl;
}
output << "Class " << scores[i][0] << endl;
output << "ID\tScore\tRank" << endl;
current_class = scores[i][0];
}
output << scores[i][0] << "\t" << scores[i][1] << "\t" << class_ranks[i] << endl;
}
output << endl << "School" << endl;
output << "ID\tScore\tRank" << endl;
for (int i = 0; i < scores.size(); i++) {
output << scores[i][0] << "\t" << scores[i][1] << "\t" << school_ranks[i] << endl;
}
cout << "End" << endl;
return 0;
}
```
代码中使用了 C++ 的 ifstream 和 ofstream 类来读取和写入文件,使用了 vector 存储数据,使用了 sort 函数进行排序,使用了 lambda 表达式实现 sort 函数的自定义排序规则。
在运行代码之前,请确保数据文件 data.txt 存在,并且格式与示例文件相同。代码运行后,会在当前目录下生成一个名为 output.txt 的文件,其中包含了班级排名和学校排名的表格数据。
阅读全文