C- 交换结构数组内的字符串或数字的决策函数

标签 c sorting pointers struct

typedef struct Workers
{
char id[10];
char *fName;
char *lName;
int  yob;
int monthlyHours;
int salary;



}workers;

所以我有一个充满 worker 详细信息的结构。 在主菜单中,用户输入一个选项: 1.按id排序 2.按名字排序 3.按月小时数排序 我需要创建一个决策函数,它是一个指针函数,它将按所选选项按字符串或整数对结构进行排序。

我编写了一个冒泡排序函数和一个交换函数,但完全不知道如何创建一个可以处理所有类型排序的决策函数

交换功能的当前状态

int me_compare(workers *me1, workers *me2) {
int surnameResult;

surnameResult = strcmp(me1->fName, me2->fName);

return surnameResult;
}

排序函数的当前状态

void sortStruct(workers newWorkers[N], int numOfSort)
{
workers tmp;
workers tmp2;
int i = 0;
int j = 0;

int result;
int swapped;
for ( i = 0;( i < N-1); i++)
{
    swapped = 0;
    for (j = 0; j < N-i - 1; j++)
    {
        tmp = newWorkers[j];
        tmp2 = newWorkers[j + 1];
        result = me_compare(&tmp, &tmp2);
        if (result == 1)
        {
            newWorkers[j] = tmp2;
            newWorkers[j + 1] = tmp;
            swapped = 1;
        }
    }
    if (swapped == 0)
        break;

}

}

有什么建议可以帮助我处理这个问题吗?

最佳答案

对于 int 值,我们使用

for(i = 0; i < n-1; i++)
{
   for(j = 0 ; , j = n-i-1; j++)
   {
       if(value[i]>value[i+1])
           swap(value[i],value[i+1]);
   }
}

类似地,对于结构函数,我们可以使用

    if(workers[i]->salary > workers[i+1]->salary)

C++ 中的模板用于编写具有泛型类型的函数,但在 C 中我们没有此功能

我建议您为 int 和 char 类型编写两个不同的交换函数,并在排序时编写额外的代码来识别它是 char 还是 int 并根据此使用交换函数

关于C- 交换结构数组内的字符串或数字的决策函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50763210/

相关文章:

c - Linux 内核 : Static Const vs #Define

c# - 书籍索引的序列和 Rangify 列表

c - 动态分配的字符串数组

c - 关于C中指向指针的指针

Python 按最高优先级列表替换元组列表中的元组

c++ - 范围解析运算符之前的类名中的指针

c - 在 gdb 中获取指针的地址

c - 编译过程中替换宏

c - 什么是链接器符号 __TMC_END__ 和 __TMC_LIST__?

c++ - 从文本文件读取到数组