|
今天在写一个通讯录实现程序的时候,遇到个让我突然卡壳的问题,不知道怎么进行两个结构体之间的成员互换......结构体成员有“姓名”,“性别”,“年龄”,“地址”,“电话”,目的就是实现一个通过年龄进行sort排序的功能,作为一个努力学习的编程小白来说,有太多的东西需要学习了..........代码如下:
一、结构体的创建代码展示
- 1 #define Max 1000
- 2 #define Num_Name 10
- 3 #define Num_Sex 4
- 4 #define Num_Tele 13
- 5 #define Num_Address 20
- 6
- 7 struct Pepinfo //创建通讯录结构体
- 8 {
- 9 char Name[Num_Name];
- 10 char Sex[Num_Sex];
- 11 int Age;
- 12 char Tele[Num_Tele];
- 13 char Address[Num_Address];
- 14 };
- 15
- 16 struct contact
- 17 {
- 18 struct Pepinfo data[Max];
- 19 int size;
- 20 };
复制代码 提示:由于通讯录需要19行的size来记录存入的成员个数,所以在这里使用了嵌套的结构体;想要创建1000个有着第七行Pepinfo的结构信息的成员。
二、main主函数实现代码展示
- 1 int main()
- 2 {
- 3 int input=0;
- 4 struct contact pepnum;
- 5 Initpepnum(&pepnum);// 初始化结构体
- 6 do
- 7 {
- 8 menu();// 打印提示信息
- 9 scanf("%d", &input);
- 10 switch (input)
- 11 {
- 12 case 1:// 增
- 13 Add(&pepnum);
- 14 printf("添加成功!");
- 15 break;
- 16 case 2:// 删
- 17 Dele(&pepnum);
- 18 break;
- 19 case 3:// 查
- 20 Search(&pepnum);
- 21 break;
- 22 case 4:// 改
- 23 Modify(&pepnum);
- 24 break;
- 25 case 5:// 显示成员信息
- 26 Show(&pepnum);
- 27 break;
- 28 case 6:// 成员排序
- 29 Sort(&pepnum);
- 30 break;
- 31 case 0:// 退出程序
- 32 printf("操作结束,保存成功!");
- 33 break;
- 34 default:
- 35 printf("输入错误!\n");
- 36 break;
- 37 }
- 38 } while (input);
- 39 return 0;
- 40 }
复制代码 提示:这么些行代码,其实紧要的只有第29行,进行sort的实现。
三、sort函数实现
- 1 void Sort(struct contact* so)
- 2 {
- 3 if (so->size == 0)
- 4 {
- 5 printf("通讯录信息不足!\n");
- 6 }
- 7 else
- 8 {
- 9 for (int j = 0; j <so->size-1 ; j++)
- 10 {
- 11 for (int i = 0; i < so->size - 1-j; i++)
- 12 {
- 13 struct Pepinfo tmp;
- 14 if (so->data[i].Age > so->data[i + 1].Age)
- 15 {
- 16 //结构体交换
- 17 tmp = so->data[i];
- 18 so->data[i] = so->data[i + 1];
- 19 so->data[i + 1] = tmp;
- 20 }
- 21 }
- 22
- 23 }
- 24 }
- 25 Show(so);
- 26 printf("排序成功!!\n");
- 27 };
复制代码 提示:以上的是正确代码,我之前写的是直接根据年龄进行冒泡排序,排序要交换两个结构体的Age的值,交换之后,其他成员并不会也进行交换,所以在第13行需要再次进行创建一个tmp的结构体作为结构体成员互换的中间站,结构体的成员互换并不需要进行挨个成员进行互换,直接进行整体的交换就可以了,成员之间是会相互对应的,如上图17行到19行所示。
来源:https://www.cnblogs.com/hx2001/archive/2022/12/31/17017530.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|