翼度科技»论坛 编程开发 .net 查看内容

C语言两结构体之间的成员互换

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
今天在写一个通讯录实现程序的时候,遇到个让我突然卡壳的问题,不知道怎么进行两个结构体之间的成员互换......结构体成员有“姓名”,“性别”,“年龄”,“地址”,“电话”,目的就是实现一个通过年龄进行sort排序的功能,作为一个努力学习的编程小白来说,有太多的东西需要学习了..........代码如下:

一、结构体的创建代码展示
  1. 1 #define Max 1000
  2. 2 #define Num_Name 10
  3. 3 #define Num_Sex 4
  4. 4 #define Num_Tele 13
  5. 5 #define Num_Address 20
  6. 6
  7. 7 struct Pepinfo //创建通讯录结构体
  8. 8 {
  9. 9     char Name[Num_Name];
  10. 10     char Sex[Num_Sex];
  11. 11     int Age;
  12. 12     char Tele[Num_Tele];
  13. 13     char Address[Num_Address];
  14. 14 };
  15. 15
  16. 16 struct contact
  17. 17 {
  18. 18     struct Pepinfo data[Max];
  19. 19     int size;
  20. 20 };
复制代码
提示:由于通讯录需要19行的size来记录存入的成员个数,所以在这里使用了嵌套的结构体;想要创建1000个有着第七行Pepinfo的结构信息的成员。
二、main主函数实现代码展示
  1. 1 int main()
  2. 2 {
  3. 3     int input=0;
  4. 4     struct contact pepnum;
  5. 5     Initpepnum(&pepnum);// 初始化结构体
  6. 6     do
  7. 7     {
  8. 8         menu();// 打印提示信息
  9. 9         scanf("%d", &input);
  10. 10         switch (input)
  11. 11         {
  12. 12         case 1:// 增
  13. 13             Add(&pepnum);
  14. 14             printf("添加成功!");
  15. 15             break;
  16. 16         case 2:// 删
  17. 17             Dele(&pepnum);
  18. 18             break;
  19. 19         case 3:// 查
  20. 20             Search(&pepnum);
  21. 21             break;
  22. 22         case 4:// 改
  23. 23             Modify(&pepnum);
  24. 24             break;
  25. 25         case 5:// 显示成员信息
  26. 26             Show(&pepnum);
  27. 27             break;
  28. 28         case 6:// 成员排序
  29. 29             Sort(&pepnum);
  30. 30             break;
  31. 31         case 0:// 退出程序
  32. 32             printf("操作结束,保存成功!");
  33. 33             break;
  34. 34         default:
  35. 35             printf("输入错误!\n");
  36. 36             break;
  37. 37         }
  38. 38     } while (input);
  39. 39     return 0;
  40. 40 }
复制代码
提示:这么些行代码,其实紧要的只有第29行,进行sort的实现。
三、sort函数实现
  1. 1 void Sort(struct contact* so)
  2. 2 {
  3. 3     if (so->size == 0)
  4. 4     {
  5. 5         printf("通讯录信息不足!\n");
  6. 6     }
  7. 7     else
  8. 8     {
  9. 9         for (int j = 0; j <so->size-1 ; j++)
  10. 10         {
  11. 11             for (int i = 0; i < so->size - 1-j; i++)
  12. 12             {
  13. 13                 struct Pepinfo tmp;
  14. 14                 if (so->data[i].Age > so->data[i + 1].Age)
  15. 15                 {
  16. 16                     //结构体交换
  17. 17                     tmp = so->data[i];
  18. 18                     so->data[i] = so->data[i + 1];
  19. 19                     so->data[i + 1] = tmp;
  20. 20                 }
  21. 21             }
  22. 22
  23. 23         }
  24. 24     }
  25. 25     Show(so);
  26. 26     printf("排序成功!!\n");
  27. 27 };
复制代码
提示:以上的是正确代码,我之前写的是直接根据年龄进行冒泡排序,排序要交换两个结构体的Age的值,交换之后,其他成员并不会也进行交换,所以在第13行需要再次进行创建一个tmp的结构体作为结构体成员互换的中间站,结构体的成员互换并不需要进行挨个成员进行互换,直接进行整体的交换就可以了,成员之间是会相互对应的,如上图17行到19行所示。

来源:https://www.cnblogs.com/hx2001/archive/2022/12/31/17017530.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具