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

时间:2023-01-01 07:14:51

一、结构体的创建代码展示

 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行所示。