通过函数回调排序结构体数组
来源:互联网 发布:上海兄弟连java学费 编辑:程序博客网 时间:2024/06/08 12:22
通过函数回调排序结构体数组
main文件
#import <Foundation/Foundation.h>#import "teacher.h"/** 函数名枚举 */enum FunctionName{ CompareNameByAscending = 1, CompareNameByDescending, CompareNumberByAscending, CompareNumberByDescending, CompareScoreByAscending, CompareScoreByDescending, PrintFemaleTeacher, PrintMaleTeacher};int main(int argc, const char * argv[]) { // 创建结构体 Teacher sunGaoJie = {"sunGaoJie",'m',23,002,98}; Teacher zhangChunFei = {"zhangChunFei",'m',25,001,97}; Teacher chenPengJu = {"chenPengJu",'m',22,005,99}; Teacher guLi = {"guLi",'f',20,003,94}; Teacher wangChao = {"wangChao",'f',21,006,92}; // 结构体数组 Teacher tea[5] = {sunGaoJie,zhangChunFei,chenPengJu,guLi,wangChao}; // 用于存储用户输入的选项 short number = 0; // 存数是否结束的用户输入 char goOn = 'Y'; // 存储是否选择输出男女老师 BOOL pintfSex = NO; // 初始化函数指针 CompareFunctionPointer cfp = NULL; // 主循环 while (goOn!='n' && goOn!='N') { pintfSex = NO; printf("==================================\n"); printf("输入1: 实现按照姓名进行升序排列\n"); printf("输入2: 实现按照姓名进行降序排列\n"); printf("输入3: 实现按照员工编号进行升序排列\n"); printf("输入4: 实现按照员工编号进行降序排列\n"); printf("输入5: 实现按照评分进行升序排列\n"); printf("输入6: 实现按照评分进行降序排列\n"); printf("输入7: 实现输出所有女员工\n"); printf("输入8: 实现输出所有男员工\n"); printf("==================================\n"); printf("请输入实现功能对应的数字:\n"); scanf("%hd",&number); getchar(); switch (number) { // 进行各选项函数回调 case CompareNameByAscending: cfp=compareNameByAscending;break; case CompareNameByDescending: cfp=compareNameByDescending;break; case CompareNumberByAscending: cfp=compareNumberByAscending;break; case CompareNumberByDescending: cfp=compareNumberByDescending;break; case CompareScoreByAscending: cfp=compareScoreByAscending;break; case CompareScoreByDescending: cfp=compareScoreByDescending;break; // 输出那女老师,如果选择讲printSex的布尔值变为YES case PrintFemaleTeacher: printFemaleTeacher(tea, 5);pintfSex=YES;break; case PrintMaleTeacher: printMaleTeacher(tea, 5);pintfSex=YES;break; default:printf("输入错误,请重新输入!\n");pintfSex=YES;break; } sortTeachers(tea, 5, cfp); if (pintfSex==NO) { printTeachers(tea, 5); } printf("继续执行吗?(Y/N)"); scanf("%c",&goOn); } printf("再见!\n"); return 0;}
TEACHER.h文件
#import <Foundation/Foundation.h>/** 老师结构体声明 */typedef struct Teacher{ char name[20]; char sex; short age; short number; float score;}Teacher;/** 比较函数指针 */typedef BOOL (*CompareFunctionPointer)(Teacher teacher1,Teacher teacher2);#pragma mark - 从此以下为函数声明/** 打印一个员工 */void printTeacher(Teacher* teacher);/** 员工数组排序 */void sortTeachers(Teacher teacher[],int count,CompareFunctionPointer cfp);/** 打印员工数组 */void printTeachers(Teacher teacher[],int count);/** 打印男员工 */void printMaleTeacher(Teacher *teachers,int count);/** 打印女员工 */void printFemaleTeacher(Teacher *teachers,int count);/** 比较员工姓名 */BOOL compareNameByAscending(Teacher teacher1,Teacher teacher2);BOOL compareNameByDescending(Teacher teacher1,Teacher teacher2);/** 比较员工编号 */BOOL compareNumberByAscending(Teacher teacher1,Teacher teacher2);BOOL compareNumberByDescending(Teacher teacher1,Teacher teacher2);/** 比较员工评分 */BOOL compareScoreByAscending(Teacher teacher1,Teacher teacher2);BOOL compareScoreByDescending(Teacher teacher1,Teacher teacher2);
teach.m文件
#import "teacher.h"#import "teacher.h"/** 打印一个老师 */void printTeacher(Teacher* teacher){ printf("这名老师的姓名:%s 性别:%c 年龄:%hd 员工编号:%hd 评分:%.2f\n",teacher->name,teacher->sex,teacher->age,teacher->number,teacher->score);}/** 员工数组排序 */void sortTeachers(Teacher teacher[],int count,CompareFunctionPointer cfp){ Teacher terTemp = {0}; if (cfp == NULL) { return; } for (int i = 0; i < count-1; i++) { for (int j = 0; j < count-i-1; j++) { if (cfp(teacher[j],teacher[j+1])) { terTemp = teacher[j]; teacher[j] = teacher[j+1]; teacher[j+1] = terTemp; } } }}/** 打印员工数组 */void printTeachers(Teacher teacher[],int count){ for (int i = 0; i < count; i++) { printTeacher(&teacher[i]); }}/** 打印男员工 */void printMaleTeacher(Teacher *teachers,int count){ for (int i = 0 ; i < count; i++) { if (teachers[i].sex == 'm') { printTeacher(&teachers[i]); } }}/** 打印女员工 */void printFemaleTeacher(Teacher *teachers,int count){ for (int i = 0 ; i < count; i++) { if (teachers[i].sex == 'f') { printTeacher(&teachers[i]); } }}#pragma mark - 函数指针回调(比较值)/** 比较员工姓名 */BOOL compareNameByAscending(Teacher teacher1,Teacher teacher2){ return strcmp(teacher1.name, teacher2.name) > 0;}BOOL compareNameByDescending(Teacher teacher1,Teacher teacher2){ return strcmp(teacher1.name, teacher2.name) < 0;}/** 比较员工编号 */BOOL compareNumberByAscending(Teacher teacher1,Teacher teacher2){ return teacher1.number > teacher2.number;}BOOL compareNumberByDescending(Teacher teacher1,Teacher teacher2){ return teacher1.number < teacher2.number;}/** 比较员工评分 */BOOL compareScoreByAscending(Teacher teacher1,Teacher teacher2){ return teacher1.score > teacher2.score;}BOOL compareScoreByDescending(Teacher teacher1,Teacher teacher2){ return teacher1.score < teacher2.score;}
0 0
- 通过函数回调排序结构体数组
- 结构体数组排序
- 结构体数组排序
- 结构体数组排序
- 一个关于文件结构体数组的条件排序函数
- 结构体数组--排序查找
- 数组结构体中排序
- 结构体嵌套、结构体数组、排序
- 数组通过array_push函数进行排序 及 选择排序
- 通过函数调用对字符串数组进行各种排序
- []数组_函数调用数组 、指针数组、结构体数组
- sort函数对数组、容器以及结构体的排序(for sort)
- hdoj 1084 What Is Your Grade?(sort函数按规则排序结构体数组)
- 二维数组利用结构体进行排序
- 冒泡排序,动态结构体数组举例
- 结构体数组借助指针排序
- hdoj 2020 绝对值排序 (结构体数组)
- 利用sort对结构体数组排序
- C++ 深入了解 函数, 虚函数, 单继承,多继承,指针,引用。
- Immediate Decodability
- 3.3EPT内存虚拟化
- 并查集应用食物链poj1182
- 打鱼还是晒网
- 通过函数回调排序结构体数组
- LeetCode---(197)Largest Number
- 3.4Shadowpage页表虚拟化
- J2ee入门之开发环境搭建
- POJ 1436 Horizontally Visible Segments(线段树区间染色问题)
- 代码评审这点事,元芳你怎么看
- c++学习日记 1
- Being a Hero (hdu 3251 最小割 好题)
- scikit-learn:4.7. Pairwise metrics, Affinities and Kernels