讲解这个问题,以一个例子入手:PAT(A)1080 Graduate Admission
方法一:
定义一个结构体数组,为该数组开辟一块大的存储空间,然后进行初始化赋值。
#include<iostream>
using namespace std;
struct student {
int ge;
int gi;
int b[6] = {
0 };
};
int main()
{
struct student *stu;
int n, m, k;
// n申请人总数,m研究生院总数,k申请人可以选择的数量
cin >> n >> m >> k;
/*
int a[101] = { 0 }; // 每个研究生院的配额
for (int i = 0; i < m; i++)
{
int g;
cin >> g;
a[i] = g;
}
*/
//为结构体分配存储空间
stu = (struct student *)malloc(40000* sizeof(struct student));
for (int i = 0; i < n; i++) // 为所有学生输入他的各项信息
{
int c, d, e;
cin >> c >> d;
stu[i].ge = c;
stu[i].gi = d;
for (int j = 0; j < k; j++)
{
cin >> e;
stu[i].b[j] = e;
}
}
for (int i = 0; i < n; i++)
for(int j=0; j<k; j++)
cout << stu[i].ge << " " << stu[i].gi << " " << stu[i].b[j] << endl;
system("pause");
return 0;
}
输入:
3 6 3
100 100 0 1 2
60 60 2 3 5
100 90 0 3 4
输出:
通过输出可以发现,输入的数据都存入了对应每个学生结构体的各项信息中。
方法二:
通过vector来进行动态数组的赋值操作
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct stu {
int id;
double g1, g2;
int choice[6];
};
int main()
{
int n, m, k;
cin>>n>>m>>k;
vector<stu> students;
stu tmp;
for (int i = 0; i < n; i++)
{
tmp.id = i;
int a,b;
cin>>a>>b;
tmp.g1=a;
tmp.g2=b;
for (int j = 0; j < k; j++)
{
int c;
cin>>c;
tmp.choice[j]=c;
}
students.push_back(tmp);
}
for(int i=0; i<n; i++)
{
for(int j=0; j<k; j++)
cout<<students[i].g1<<" "<<students[i].g2<<" "<<students[i].choice[j]<<endl;
}
return 0;
}
输入:
5 6 3
100 100 0 1 2
60 60 2 3 5
100 90 0 3 4
90 100 1 2 0
90 90 5 1 3
输出:
通过输出可以发现,输入的数据都存入了对应每个学生结构体的各项信息中。
故对于动态数组结构体的处理,有以上两种方法,关于PAT(A)1080 的详细的解题过程及代码,参见其他博客。