我没有得到 elab 问题的正确输出。这是问题:
系里有院系,你必须根据身份证号来安排院系的名单。
测试案例 1
输入
Run Code Online (Sandbox Code Playgroud)5 Ram 101 Rahul 95 Ashwin 75 Ahamed 106 Saurav 110输出
Run Code Online (Sandbox Code Playgroud)After Sorting Name ID Ashwin 75 Rahul 95 Ram 101 Ahamed 106 Saurav 110
这是我使用结构实现的代码:
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
struct faculty{
string name;
int id;
};
int main(){
int n;
struct faculty arr[n];
for(int i=0;i<n;i++){
cin>>arr[i].name;
cin>>arr[i].id;
}
cout<<"After Sorting"<<endl;
cout<<"Name ID"<<endl;
//insertion sort
for(int i=1;i<n;i++){
struct faculty key=arr[i];
int j=i-1;
while(j>=0 && arr[j].id>key.id)
{
arr[j+1]=arr[j];
j--;
}
arr[j+1]=key;
}
//printing
for(int i=0;i<n;i++){
cout<<arr[i].name<<" "<<arr[i].id;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的输出:
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
struct faculty{
string name;
int id;
};
int main(){
int n;
struct faculty arr[n];
for(int i=0;i<n;i++){
cin>>arr[i].name;
cin>>arr[i].id;
}
cout<<"After Sorting"<<endl;
cout<<"Name ID"<<endl;
//insertion sort
for(int i=1;i<n;i++){
struct faculty key=arr[i];
int j=i-1;
while(j>=0 && arr[j].id>key.id)
{
arr[j+1]=arr[j];
j--;
}
arr[j+1]=key;
}
//printing
for(int i=0;i<n;i++){
cout<<arr[i].name<<" "<<arr[i].id;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?我无法弄清楚错误是什么。
首先,对您的代码进行一些分析:
#include<bits/stdc++.h>. 这是不兼容的 C++ 代码。它不适用于其他编译器using namespace std;. 总是更喜欢显式使用范围arr[n])-std=c++14 -Wall -Wextra -Wpedanticstd::vector具体错误:
std::vector因此,您的固定软件将如下所示:
#include<iostream>
#include <string>
#include <vector>
struct faculty {
std::string name;
int id;
};
int main() {
int n;
std::cin >> n;
std::vector<faculty> arr(n);
for (int i = 0; i < n; i++) {
std::cin >> arr[i].name;
std::cin >> arr[i].id;
}
std::cout << "After Sorting" << std::endl;
std::cout << "Name ID" << std::endl;
//insertion sort
for (int i = 1; i < n; i++) {
faculty key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j].id > key.id)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
//printing
for (int i = 0; i < n; i++) {
std::cout << arr[i].name << " " << arr[i].id << '\n';
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这不是首选的解决方案。
您应该以不同的方式解决您的问题,以获得更好的解决方案。
首先,我们需要初始化什么做的。
std::cin必须是可能的std::cout接下来,我们需要思考如何满足需求。我们还没有写任何代码。好的,让我们看看:
std::string代表名称,anunsigned int代表 ID,因为我们假设 ID 永远不会是负数。>>。因此,我们现在可以从任何流中读取数据。<<。if- 语句并检查是否有效。std::vector。好的,我们澄清了 WHAT 和 HOW。现在(不是之前),我们可以开始编码了。
不幸的是,有数百万种可能的解决方案。我将展示一个更高级的版本,但您可以根据自己的需要实现任何内容。
请看下面的例子:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
struct Faculty {
// 1. Our data. Initiliaze with default
std::string name{};
unsigned int id{};
// 2. Define extractor operator for this data
friend std::istream& operator >> (std::istream& is, Faculty& f) {
return is >> f.name >> f.id;
}
// 3. Define inserter operator for this data
friend std::ostream& operator << (std::ostream& os, const Faculty& f) {
return os << f.name << '\t' << f.id;
}
};
int main() {
// 4. Get the number of members that we should read, and check, if input worked
size_t numberOfMembers{};
if (std::cin >> numberOfMembers) {
// 5. Here we will store all data
std::vector<Faculty> data{};
// 6. Copy all data from std::cin into our data vector
std::copy_n(std::istream_iterator<Faculty>(std::cin), numberOfMembers, std::back_inserter(data));
// 7. Sort according to ID
std::sort(data.begin(), data.end(), [](const Faculty& f1, const Faculty& f2) { return f1.id < f2.id; });
// 8. Output
std::copy(data.begin(), data.end(), std::ostream_iterator<Faculty>(std::cout, "\n"));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
要在启用 C++14 的情况下编译。