c++通信录包含 “姓名”(最多20个字符)、 “生日”(包括“年”、“月”、“日”)、 “电话号码”、 “家庭地址”(最多50个字符)。 定义一个嵌套的结构类型,输入n(n<10)个学生信息,再按照他们的年龄从小到大的顺序输出
时间: 2023-06-15 15:07:19 浏览: 254
以下是一个基本的实现:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// 定义生日结构体
struct Birthday {
int year;
int month;
int day;
};
// 定义学生结构体
struct Student {
string name;
Birthday birthday;
string phone;
string address;
};
// 比较函数,用于排序
bool compare(Student s1, Student s2) {
if (s1.birthday.year != s2.birthday.year) {
return s1.birthday.year < s2.birthday.year;
} else if (s1.birthday.month != s2.birthday.month) {
return s1.birthday.month < s2.birthday.month;
} else {
return s1.birthday.day < s2.birthday.day;
}
}
int main() {
int n;
cout << "请输入学生人数:";
cin >> n;
Student students[n];
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个学生的信息:" << endl;
cout << "姓名:";
cin >> students[i].name;
cout << "生日(年 月 日):";
cin >> students[i].birthday.year >> students[i].birthday.month >> students[i].birthday.day;
cout << "电话号码:";
cin >> students[i].phone;
cout << "家庭地址:";
cin >> students[i].address;
}
sort(students, students + n, compare);
cout << "按照年龄从小到大的顺序输出学生信息:" << endl;
for (int i = 0; i < n; i++) {
cout << "姓名:" << students[i].name << endl;
cout << "生日:" << students[i].birthday.year << "年" << students[i].birthday.month << "月" << students[i].birthday.day << "日" << endl;
cout << "电话号码:" << students[i].phone << endl;
cout << "家庭地址:" << students[i].address << endl;
cout << endl;
}
return 0;
}
```
在这个实现中,我们定义了两个结构体类型:`Birthday` 和 `Student`。`Birthday` 结构体包含了生日的年、月、日,而 `Student` 结构体则包含了姓名、生日、电话号码、家庭地址。
我们还定义了一个比较函数 `compare`,用于按照年龄从小到大排序。在主函数中,我们首先输入学生信息,然后调用 `sort` 函数按照年龄从小到大排序,最后输出排序后的学生信息。
请注意,在这个实现中,我们使用了 C++ 中的 `sort` 函数,这个函数可以对数组进行排序。我们还使用了 `bool` 类型,这是布尔类型,它只有两个取值:`true` 和 `false`。在 `compare` 函数中,我们根据年、月、日依次比较,如果年相等,则比较月,如果月相等,则比较日。
阅读全文